<分区>
我正在尝试在 Linux 中编写 C 程序。
#include<stdio.h>
void fun(int *r)
{
*r=20;
r--;
*r=30;
r--;
*r=40;
}
int main()
{
int a=2;
int b=3;
int c=4;
fun(&c);
printf("a=%d\nb=%d\nc=%d",a,b,c);
return 0;
}
当我运行代码时,它给我一个段错误(核心已转储)。
但是当我在函数调用之前在主函数中打印a
、b
和c
的地址时,代码就可以工作了。
#include<stdio.h>
void fun(int *r)
{*r=20;
r--;
*r=30;
r--;
*r=40;
}
int main()
{
int a=2;
int b=3;
int c=4;
printf("a=%p\nb=%p\nc=%p\n",&a,&b,&c);
fun(&c);
printf("a=%d\nb=%d\nc=%d",a,b,c);
return 0;
}
谁能告诉我为什么会这样?