关于函数入口参数是“指针的指针”的用法 void **

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:20   2079   0

最近在看LWIP,看到这样一个函数,因为LWIP做到尽可能的减少内存间复制的处理,所以通常是让应用层直接去操作协议层的netbuf,所以这个函数就是一个获取netbuf指针的函数。

可以看到入口参数是void** data。

函数内,buf->ptr->payload就是netbuf的指针

使用时


为什么要传入指针的指针去获取一个指针呢?直接一个指针不行吗?如下:

单纯设置为netbuf_data(struct netbuf *buf, void *dataptr, u16_t *len)
函数内 为 dataptr = buf->ptr->payload;
调用时netbuf_data(buf, data,&len);


这样是不行的,就好像你想从入口参数传入一个变量,让函数内可以改变变量的值。就是上个函数中的u16_t *len入口参数,不能传入u16 len,得传入len的指针。

同样的道理,如果要往一个函数中传入一个指针,使其可以被修改,就要传入指针的指针。

曾经我也尝试从入口参数去传入一个变量,使其在函数内修改,但是运行过后,完全不是想要的结果。


原因是,你往函数中传入一个变量,在函数内这个变量是一个随机地址,也就是说函数操作的不是这个变量本身的地址,结果当然是错误的。也就是说我要一个函数操作一个变量,我应该给这个变量的地址-也就是指针。

同样的,我要一个函数操作一个变量的地址,那我就要给这个变量的地址的地址-也就是指针的指针。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP