中易网

#include<stdio.h> 关于c语言二级 int k=7,m=5; void f(int **s) { int *t=&k;

答案:6  悬赏:20  
解决时间 2021-02-28 17:28
#include<stdio.h>
int k=7,m=5;
void f(int **s)
{ int *t=&k;
s=&t; *s=&m; printf("%d,%d,%d,",k,*t,**s);
}
main()
{ int i=3,*p=&i,**r=&p;
f(r);

把r给了s之后 (进行了f(r)之后 r的值是变成了s 还是不变)
最佳答案
传地址的变,传值得不变。
在给a和b分别赋值5,9后,把a的地址1703740给了指针变量pointer_1,把b1703736的地址给了指针变量pointer_2(为了方便,地址用%d输出,不同的PC,情况不同,但是原理都一样)。然后调用函数,把指针存储的值(a、b的地址)传递给P1、P2指针。
在调用函数的进行交换的代码,可以看出,只是单纯的将各自存储的地址进行交换而已。所以,指针变量只是在调用函数里交换了存储的地址,可以在调用函数里输出9,5。但是一旦调用结束,P1、P2指针变量就会被释放。并没有在根本上进行交换。c语言中三种方法交换两个数的值:
方法一:利用中间变量,以此依托交换两个数的值;
方法二:利用两数之间互相加减,来实现两数的交换;
方法三:利用按位异或^来实现两数的交换,注意两数需转换成二进制比较。



扩展资料
C 语言本质上是传值调用(call by value)的语言,因为函数的形参都是局部变量,它们通过传入的实参进行初始化。
C 语言的优点是,只要表达式的类型适当,就可以当作实参。另一方面,缺点是在启用函数时,如需要复制大数据对象,则运行成本很高。而且,函数没有办法修改原始变量(调用者的变量),只能修改原始变量的复制版本。
然而,如果函数的实参是变量的地址,那么函数就可以通过指针,直接获取该原始变量,并修改原始变量的值。所以,C 语言也提供了传址调用(call by reference)函数。
全部回答
7,7,7 不变
s r值指向同一地址!!!
7,7,7 不变 再看看别人怎么说的。
传地址的变,传值得不变
#include<stdio.h> int k=7,m=5; void f(int **s) {  int *t=&k; t是一个变量,它的值是k的地址,*t就是k s=&t; s是一个变量,它的值是t的地址,*s就是t *s=&m; *s就是t,也就是把m的地址的值赋给t,那么t的值就变成了m的地址 printf("%d,%d,%d,",k,*t,**s);结果是7,7,5 } main() { int i=3,*p=&i,**r=&p; f(r);r的值传递给s,r和s是分别的2个变量,*r=*s=p, 但是f里面重新修改了s,那么变成了*s=t,没有改动过p,因此r没有变,p也没有变。 面对指针操作的时候,先撇开其类型上的区别,比如上边的s和t, 他们本质都是一个变量,然后记录了一个值,你只需要记录当s=&t时,*s就是t 然后一步步推理,就能分析清楚所有的指针操作,久而久之,熟能生巧。 至于类型上,记住一个关系:s=&t,那么s就该比t多一个*号 如t是int *t,那么s就是int **s
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
白山市浑江区红土崖林业工作站我想知道这个在
宁乡炭河里的免费门票怎么定
我用支付宝在博雅斗地主买金币没到帐怎么回事
夜间盗汗与献血有关吗?
运总驾校在什么地方啊,我要过去处理事情
初中中考化学实验视频和物理实验视频
智慧大课堂学业总复习全程精炼升级版地理哪有
一个16岁的男生,能轻轻松松做30个俯卧撑。算
住房公积金是强制性的吗
如果公务员认为上级决定或者命令明显违法而不
周至县终南果菜专业合作社地址有知道的么?有
上课不是想睡觉就是走神,听着听着就想到别的
我从前在吸烟但我现在决定戒烟并且劝周围的人
闽人复与闽人社复的区别
英朗GT前挡风玻璃导流板换个要多少钱?去哪换
推荐资讯
本田JADE 这车怎样
为什么美丽莎的鞋每双的logo都不一样呢
诚信汽配在什么地方啊,我要过去处理事情
16年广东二本升一本学校
求一部电影!挺早的。最后部分是一个男人被扔
请专业英语老师帮忙翻译以下句子:Showmeyour
天回镇到杜甫草堂多少公里
c语言表达式的定义
北京市法院工作人员编码是几位数?有没有字母
语文是什么科学
请问从深圳宝安中心出发,坐地铁如何到达福田
2014年存5万定期两年利息多少
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?