#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 还是不变)
#include<stdio.h> 关于c语言二级 int k=7,m=5; void f(int **s) { int *t=&k;
答案:6 悬赏:20
解决时间 2021-02-28 17:28
- 提问者网友:她是我的お女人
- 2021-02-28 10:00
最佳答案
- 二级知识专家网友:桑稚给你看
- 2021-02-28 10:38
传地址的变,传值得不变。
在给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)函数。
在给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)函数。
全部回答
- 1楼网友:何以畏孤独
- 2021-02-28 14:31
7,7,7
不变
- 2楼网友:劳资的心禁止访问
- 2021-02-28 13:27
s r值指向同一地址!!!
- 3楼网友:魅世女王
- 2021-02-28 13:09
7,7,7
不变
再看看别人怎么说的。
- 4楼网友:我颠覆世界
- 2021-02-28 12:13
传地址的变,传值得不变
- 5楼网友:24K纯糖
- 2021-02-28 11:14
#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
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯