关于c/c++指针,指针的指针

微信扫一扫,分享到朋友圈

关于c/c++指针,指针的指针

伪军迷祝:建军节快乐!

当调用一个函数时,实际上入参使用的都是副本(除非是引用),指针也不例外。举个例子如:

void func(int a, int * p);

当调用func时无论是a还是p其实传入的都是副本,假设调用func时传给p的值是pt,则p这个pt的副本保存着和pt一样的地址,*p和*pt都是同一地址上的值,改变*p也就改变了*pt。

但是,对p本身的操作是不会影响pt的,例如不能在函数func内部给p动态分配内存,或者使p指向别的地方,因为这只是对p这个副本进行操作,改变了p保存的地址,但是对实际调用func时的入参pt没有任何影响,

如果想改变pt指向的位置,我们可以使用指针的指针,如:

void func(int a, int **ptr);

(对c++而言,还可以用指针的引用,这个更好理解,如: void func(int a, int * &ptr);)

调用func时,在ptr位置需要传入指针的地址&pt。

假设在func内部申请了内存(m类型为 int *):

m = malloc(size);

想让pt指向这块新申请的内存,可以这样:

*ptr = m;

ptr类型为int **,pt是一个指针,所以pt的值是一个地址,假设该值为addr1,pt所在位置的地址为addr2,而指针的指针ptr的地址为addr3,这个地址上保存的是pt这个指针所在位置的地址addr2,

因此,对ptr解除引用*ptr即为ptr保存的地址addr2上的值addr1(即pt),

因此

*ptr = m;

即等价于:

pt = m;

也就让pt指向了一块新内存。

微信扫一扫,分享到朋友圈

关于c/c++指针,指针的指针

退伍不褪色:“我是T3出行司机,更是守护乘客…

上一篇

福奇对新冠阴谋论作出回应 敦促民众 “遵循科学”

下一篇

你也可能喜欢

关于c/c++指针,指针的指针

长按储存图像,分享给朋友