c语言传值调用,引用调用,地址调用

指针是C语言中比较难理解的部分。(尤其是对于 * & 的使用不是很清楚)下面我们讲看看几个小例子。

在这里插入代码片
 int n=5;
 printf("n=%d\n",n);
 int b=n;
 printf("b=%d\n",b);
 printf("n地址=%d\n",&n);
 printf("b地址=%d\n",&b);

结果
n=5
b=5
n地址=6487580
b地址=6487576

从上述的结果中我们可以看到,b=n;操作将n的值复制给b,此时b的地址与n的地址不同,说明b在内存中开辟了一块新的内存空间。

接下里我们这样更改上诉代码(引用,相当于给)

 int &b=n;

结果
n=5
b=5
n地址=6487572
b地址=6487572
从上述的结果中我们可以看到,&b=n;操作将n的值复制给b,此时b的地址与n的地址相同同,那么我们猜想两种情况中如果b+1以后,n的值怎样??
第一种情况中对b加一显然不会使得n变化,而二种情况中显然会使n变化,因为b+1改变了原有的内存地址,导致n发生变化。
根据上述两种情况即为传值调用和引用调用。
接下来我们看另一种情况

int n=5;
 int *b=&n;
 printf("n=%d\n",n);
 printf("b=%d\n",b);
 printf("n地址=%d\n",&n);
 printf("b指向地址的内容=%d\n",*b);

结果
n=5
b=6487580
n地址=6487580
b指向地址的内容=5
int 类型的指针b将变量n的地址存放在了b中。
*b取得了b指向的地址中的内容即n的值5
接下来我们分别执行
b=6487572
n地址=6487572
b指向的内存中的内容=5

b+=1;

b=6487576
b指向的内存中的内容=6487576
n=5
n地址=6487572
我们发现b的值和多指向的内容变为了6487576(int 4),而未改变n中的内容

n=5
b=6487572
n地址=6487572
b指向的内存中的内容=5

*b+=1;

b=6487572
b指向的内存中的内容=6
n=6
n地址=6487572
我们发现n的值和地址已经发生了改变。
``

总结
传值时(a,b) int (int x,int y)x,y变动与a,b变动无关(地址不同)
引用(a,b) int (int &x,int &y) a,b会随着想x,y变动变动(地址相同)
地址 (&a,&b)int (int *x,int *y)相当于
x=&a;
y=&b;
a,b会随着 *x,*y改变而改变

(本人水平有限,欢迎指正交流)

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值