C语言:哪些是值传递哪些是地址传递?

这个是用指针做参数的,我觉得这个是地址传递呀,为什么不能返回?

C语言没有真正意义的地址传递,即使传递指针也只是传递的指针的值,
比如这里加入b 的地址是0x ffff;
实际上在point 函数内是产生了另一个名为p的指针, p 指向0x ffff ( 这个p 只是和main函数的p值相同而已,不是同一个。所以传递指针其实是传递的地址的值,还是值传递)
因此p + 3 不会影响main 函数的p, 如果要改变main的p, 必须:
Point(char** p)
{
*p += 3;

}
调用:
*p = b;
Point(&p);
总之,改变指针的值用二级指针(更高一级的指针,即该指针的地址)。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-25
地址传递本质上还是值传递

地址传递的一个约定是:如果形参叫p,函数体内只能用*p不能直接用p。否则没有预期的效果。所以这里算不上地址传递
第2个回答  2014-06-25
你传递的是地址,被调函数中,你已经找到人家门,可以布置了一番,但你什么都没做,就回来了,亲,你想返回什么?
而且返回到主调函数中时,主调函数中的p并没有变化,,所以输出的是a,,有什么不对吗,,,
第3个回答  2014-06-25
指针也是一个变量。在作为函数参数的时候也是把副本传进去,所以,对原指针的值(一个地址)是没有影响的,但可以改变指向的值。在涉及到指针作为参数的时候,要用指向指针的指针或者引用去解决。
第4个回答  2014-06-25
char * p 就是地址传递
*p=b 就是值传递
相似回答