首页 > 编程语言 > 详细

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

时间:2020-08-01 12:29:55      阅读:94      评论:0      收藏:0      [点我收藏+]

伪军迷祝:建军节快乐!

 

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

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++指针,指针的指针

原文:https://www.cnblogs.com/tan-wm/p/13413921.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!