昨天对于分享了一些关于二级指针的见解,但是我感觉还是要对其在进行补充一下比较好,当时我在二级指针这方面迷糊了很久,即使是现在有时候也会犯迷糊;
当初我学二级指针的时候认为,一级指针必须指向了一个内存空间后才可以将它分配给一个二级指针;
也就是这样的:
{
int a;
int *b = NULL;
int **c = NULL;
b = &a;
c = &b;
}
刚开始我认为如果b不指向a 的空间,则不能建立一个二级指针指向他,也就是我当时认为,二级指针是指向一级指针所指向的内存空间的;
但是正如上次所说的那样,二级指针指向的是一级指针的空间,正是因为这样二级指针才可以操作一级指针的指向;
这正是无法用一级指针去改变另一个一级指针的原因;
{
int a = 10;
int b = 20;
int *c = NULL;
int *d = NULL;
c = &a;
d = c;//将c的指向赋给了d
d = &b;//这里改变了d的指向是不会改变c的指向的,d指向的是b的空间,只能操作b 的空间
}
所以说一级指针即使指向NULL 二级指针也能指向它
{
int *a = NULL;
int **b = &a;
}
而二级指针的作用也正是如此,可以操作一级指针的指向;
{
int *a = NULL;
int **b = NULL;
int *c = NULL;
b = &a;
*b = (int *)malloc(sizeof(int));//在堆区分配空间,并通过二级指针b 控制一级指针a 指向这块内存空间
b = &c;//这是改变了二级指针b 的指向;将它重新指向了c,这个改变不会影响 a 所指向的内存空间;
}
以上就是我对二级指针的一些补充,希望对大家有些帮助
原文:http://www.cnblogs.com/huhaihao/p/7583475.html