第1个回答 2010-12-07
你的fun函数是按值传递,括号里面(int a, int b)相当于把a和b的副本传到函数里面,所以main函数里p指向的是b的副本的地址,你对b自增4后*p自然不变。 你如果把函数参数改为(int &a, int &b),就是8 了
第3个回答 2010-12-07
//解答:主函数中*p并不是b
#include<stdio.h>
int* fun(int b) //这里b是形参,仅仅是定义了一个变量而已
{
printf("fun: &b=%x\n",&b);
return &b;
}
int main()
{
int b=4;
int *p;
printf("main: &b=%x\n",&b); //主函数中变量b的地址
p=fun(b); //这里的b称之为实参,有实际的值
b+=4;
printf("*p=%d\n",*p);
printf("main: p=%x\n",p);
return 0;
}
//下面的是我对局部变量的正常认识
//即局部变量生命周期结束后,应该将其销毁。
//但是由上面程序可知,函数结束后并没有立即将其销毁。
//奇怪,疑惑中。。。
/*
#include<stdio.h>
int* fun(int b)
{
printf("fun: &b=%x\n",&b);
return &b;
}
int main()
{
int b=4;
int *p;
printf("main: &b=%x\n",&b);
p=fun(b); //fun函数里的b为局部变量
printf("main: p=%x\n",p); //仅仅换了一个位置而已,按我理解应该不影响程序的呀
b+=4; //只能解释为没有立即将其销毁了
printf("*p=%d\n",*p);
return 0;
}
*/