|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
有两个题:
#include<stdio.h>
int k=5;
void f(int *s)
{
*s=k;
}
void main()
{
int m=3,*p=&m;
f(p);
printf("%d,%d",m,*p);
}
这一题的答案是5,5. 为什么m的值会从3变成5? 指针p开始指向m的地址,通过函数f使得指针p指向k的地址。所以最后输出的*p值为5.p指针指向的地址改变了,m的值也会改变??为什么?
第二题类似,是我在百度上看到的:
有以下程序
#include <stdio.h>
int k=5;
void f(int *s)
{ s=&k;
*s=7;
}
main( )
{ int m=3;
f(&m);
printf("%d,%d\n", m, k);
}
程序运行后的输出结果是( )。
A
3,7
B
7,7
C
5,7
D
3,5
【答案】
A
【解析】
本题中s得到的是k的地址,而s的内容为7,所以k的值就变成了7,而题目中m的地址并没有发生变化,从而m的值依然为3。
为什么解析说m的地址没有发生改变?如果类似上题的思路,通过函数f,m的地址应该发生改变,所以最后输出来m的值也发生了改变。
我记得传值运算,如果传的是地址那么就是双向的,如果传的是数值那么就是单向的对吧??希望好心人能够详细地讲一讲,在这里谢谢大家!!
这个是因为在进入f()函数时 看注释
void f(int *p) //进入函数时 主函数的p将地址传给了f函数里的p 也就是相当于在
{ //p=&k;之前 有一个p=p; 然后又有p=&k; 其实主函数的p指向的地址并未发生改变
p=&k; //你可以自己单步调试看一下 给f函数的p改成p1 然后查看&p,&p1,&m,&k;
}
|
|