c++中recvfrom函数_c函数参数中的一级指针和二级指针作用区别

常见的一级指针参数

先来看一个最常用函数模型,函数func()参数为一个uint8_t 的指针类型,那这个函数有什么作用?

uint8_t data1[3];
void func(uint8_t *p)
{
p[0]=0x01;
p[2]=0x02;
}
void main()
{
uint8_t *p1=data1;
func(data1);
}
  • 在main函数中先定义了一个指针p1,然后把p1指向了一个数组data1。

  • 把p1作为参数传递进函数func()

  • 结果也很容易猜到,就是data1中的值在func运行时被改变了,分别等于0x01,0x02

那我们就不难理解,指针作为参数传递进去,而函数内部就可以修改这个指针所指向的数据。如下图所示:fd9be84080ef994be80e8ab0c285713a.png
而这个就是一级指针,简单的可以看函数定义的参数带一个 “*” 号就是一级指针。p1就是一个一级指针传递进去,而传递进去以后就可以修改这个一级指针所指向的地址的数据,也就是data1。

假如我想修改p1所指向的地址,该怎么办?

如下如所示,现在我想让p1不再指向data1,而是指向data283c50b8edcf813e93ee829bf52c23302.png
这个很明显用上面的一级指针作为参数已经实现不了,它只能修改p1所指向的地址的数据,而现在是要修改p1本身让他指向data2。有的小伙伴可能已经能猜到,p1指向data1我们可以修改data1,那再用一个指针指向p1不就是可以修改p1了。aece02ec1d1c673fe3a03380e362c7ae.png
那这里我们就可以定义一个指针的指针pp1,让他指向p1,这样把pp1传入到函数中,函数内部就可以修改p1的值了。
代码如下:

uint8_t data1[3];
uint8_t data2[3];
void func2(uint8_t **pp)
{
*p=data2;
}
void main()
{
uint8_t *p1=data1;
uint8_t *pp1=&p1;
func(pp1);
}
  • 8

  • 9

  • 10

  • 11

  • 12

这里传入的pp1就是一个二级指针,而func2的参数也是带两个星号。
那二级指针也就不难理解了,他可以修改指向的指针,也就是修改pp1指向的指针p1的值,让p1可以指向另外一块内存。
那实际上一般在使用的时候可能大部分都会省略掉这个pp1而使用更简便的写法:

void main()
{
uint8_t *p1=data1;
func(&p1);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值