在传参数的过程中,如果是实参是数值类型,形参被改变后的结果是不能被返回,如果是实参是指针类型就可以。解释如下:
#include <stdio.h>
void change(int a);
void change1(int *a);
int main()
{
int a = 10;
printf("main中的a的地址编号:%p\n",&a);//输出:main中的a的地址编号:0019FF3C (不同的机器输出的值不一样)
change(a);
printf("a = %d\n",a);
change1(&a);
printf("a = %d\n",a);
return 0;
}
void change(int a)
{
printf("change中a的地址编号:%p\n",&a); //输出:change中a的地址编号:0019FEEC
//说明该变量和在main()中的a是分配在栈上不一样的位置。不占用同一块内存 无法完成修改。
//change函数中的变量a是在栈上的,用完即消。
a = 100;
}
void change1(int *b)
{
printf("change1中b的地址编号:%p\n",&b);//change1中b的地址编号:0019FEEC (和上面change函数没有关系)
printf("%p\n",b); //输出:0019FF3C (不同的机器输出的值不一样)
//和main中a的地址编号相等。
printf("%d\n",*(int*)0x0019FF3C); // 将上面得到的地址的内容输出 结果显示:10 也就是说明这块内存中的内容是10;
*(int*)0x19FF3C = 100; //将0019FF3C 中的内容修改为100,请注意main中再次输出a的值。a的值被改为100; 而b==0019FF3C 所有有下:
*b = 100; // 将a的值改为100;(以上所有铺垫只为此句做解释。)
}