有指针学的好的么??

来源:百度知道 编辑:UC知道 时间:2024/06/19 11:13:09
main()
{
int fun(int *i);
int *i,j,k;
j=1;
i=&j;
k=fun(i);
printf("%d %d",*i,k);//我还以为会输出2 2呢,为什么会输出1 2?在函数中不是讲指针i给重新赋值了么
}
int fun(int *i)
{
int k;
k=2;
i=&k;//难道这里不是将k的地址给了i么?
return(k);
}

当然不行了。
谭老头说的很清楚 不能试图通过改变指针形参的值而改变指针实参得值,
c语言实参和形参之间是单向按值传送,指针变量作为函数参数也要遵循这一规则。

这里又涉及到参数副本的问题了

fun函数并没有修改i的指向

再说,k为临时变量,其地址,在函数返回后就没有意义了

传递的是值
而非地址
因此子函数当中的指针指向改变
影响不到主函数
咯咯

你把形参换个变量来定
自己就明白了