注册 登录
编程论坛 C语言论坛

c语言指针+全局变量?

Gloria_zhang 发布于 2020-11-25 21:24, 1656 次点击
程序代码:
#include<stdio.h>
int k=2;
void fun(int *p){
p=&k;
}
int main( )
{
int a=5,*p=&a;
fun(p);
printf("%d,%d\n",a,*p);
return 0;
}


请问大家这个程序为什么不输出2,2而是5,5呢?
4 回复
#2
风过无痕19892020-11-25 23:52
回复 楼主 Gloria_zhang
函数调用完了,就自行消失了,它没有对主调函数造成影响,也没有返回值供主调函数使用
#3
apull2020-11-26 01:31
程序代码:
void fun(int *p){    //参数p的值是一个内存地址,地址传递传的也是一个表示地址的数字
p=&k;        //把内存地址修改成了k的地址,传进来的内存地址所在区域的值并没有变,试试 *p=k
            
//修改后的p并没有被传回去。
}

#4
纯蓝之刃2020-11-26 10:27
p=&k;
改成
*p=k;
#5
请输入密码2020-11-26 14:47
回复 4楼 纯蓝之刃
看来是我理解错了。。。【上楼正确】

[此贴子已经被作者于2020-11-26 15:31编辑过]

#6
自由而无用2021-08-10 09:54
eg:
&k = 0x400000100;
&fun_p = 0x12ffa0;
&a = 0x12ff9c;
&main_p = 0x12ff98;
after line 6
main_p = &a = 0x12ff9c;
after line 3
fun_p = main_p = &a = 0x12ff98;
after line 4
fun_p = main_p = &k = 0x40000100;
after line 9
&a = 0x12ff9c; a = 5;
main_p = &a = 0x12ff9c; *main_p = 5;
1