链接: 小小记录本
指针变量使用
指针变量为NULL时,不能访问该地址,这些我都清楚,但是我还是经常在这里犯错,普通的指针基本没什么问题,但是涉及到隐晦一点的使用,就会马虎忘记。比如使用结构体指针的时候就常常犯错。
下面这段代码有什么问题,你能发现吗?
typedef struct AA
{
int data;
int size;
}AA;
int main()
{
AA* a1;
a1->data = 10;
return 0;
}
这段代码就是典型的使用空地址,我们在创建了结构体指针a1后,并没有为其赋值,然后就直接访问a1->data
此时就是使用了空指针去访问,自然会出错。
在创建指针之后,为它申请一个结构体空间的地址,再使用就不会有问题
typedef struct AA
{
int data;
int size;
}AA;
int main()
{
AA* a1;
a1 = (AA*)malloc(sizeof(AA));
a1->data = 10;
return 0;
}
这样问题就迎刃而解了,不过我还经常在更复杂的场景下犯错,比如结构体指针作为函数实参,嵌套结构体指针的情况下,还是会经常忘记为结构体变指针初值。
下面的代码就是指针嵌套指针的情况,这种时候必须为每一个指针变量赋予初值才可以使用,少了任何一个都会报错。
typedef struct A
{
int a;
}A;
typedef struct B
{
A* pa;
}B;
typedef struct C
{
B* pb;
}C;
int main()
{
C* pc;
pc = (C*)malloc(sizeof(C));
pc->pb = (B*)malloc(sizeof(B));
pc->pb->pa = (A*)malloc(sizeof(A));
pc->pb->pa->a = 10;
printf("%d\n", pc->pb->pa->a);
return 0;
}
总结
标签:AA,typedef,变量,int,a1,pc,赋值,指针 From: https://blog.csdn.net/weixin_69356744/article/details/136960912
- 指针变量一定要赋予初值然后再使用
- 嵌套指针的时候,记得给每个指针都赋予初值,容易忘记
- 使用多层指针遇到访问空地址的问题首先检查指针是不是空值