C语言的传值和传址,指针的指针

函数调用的时候:传值和传址

二级指针:

int a=5;

int* p=&a; 

int** p1=&p;

printf("a=%d, *p=%d, **p1=%d", a, *p, **p1);  结果是5,5,5

*p: p的值是a的地址,p指向a,*p就是看p这个地址上的变量值,*p是看p存放的地址上的变量值,不是看p这个变量值(p的变量值是地址,看p的变量值应该是看p的值,而不是通过*p的方式,*p是看指针变量p指向的地址上的变量值!)

**p1也就是*(*p1),*p1就是看p1存放的地址上的变量值,p1的值是p的地址,所以*p1就是p的值,所以**p1就是*p=a。

*地址=占据这个地址的变量的值≠地址的值

**p1:*(*p1),p1放的是指针变量p的地址,所以*p1就是指针变量p

*谁的地址=谁的值

c语言的传值和传址 - 百度文库c

传值:不改变主函数中实参的数值

传址:把主函数中变量的地址直接传给给其他函数使用,改变了主函数中实参实际的数值。

两者的区别就是:传值的话只在函数内部起作用,如果是传地址的话,经过一个函数过程,主函数中的实参就能够被实际地改变。

对于数组,因为数组通常来说占的内存是比较大的,系统不会像传值一样在函数的内存空间中再复制一块内存进行数值传递,而是直接把地址传进去,直接更改数组的实参数值。

系统对数组的内存比较苛刻。

另外还涉及到指针的指针:

传址:想通过函数实际地改变哪个实参的数值,就把这个实参的地址传进去。

指针的指针:

如果指针作为main主函数中的一个实参,并且想要改变指针的值,应该给函数形参传入的是main函数中实参指针的地址。

想要实际地改变哪个实参的变量,就传入该实参的地址,传址。

malloc-指针的指针-传址还是传值:注意:如果要通过函数调用把实参的数值改掉,传入的应该是实参的地址,而不是在被调用函数内拷贝一份内存,这份内存将会随着被调用函数的结束而消失。

malloc分配的内存需要被free才能释放,在函数内部申请malloc,即使函数结束,也不会释放这块内存。

指针的指针(简单易懂)_ShenMingYi_的博客-CSDN博客_指针的指针

函数内部使用malloc,该传址还是传值呢?_大桑树保安队的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

小哇123

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值