9个回答
展开全部
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);
总之,改变指针的值用二级指针(更高一级的指针,即该指针的地址)。
比如这里加入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);
总之,改变指针的值用二级指针(更高一级的指针,即该指针的地址)。
展开全部
地址传递本质上还是值传递
地址传递的一个约定是:如果形参叫p,函数体内只能用*p不能直接用p。否则没有预期的效果。所以这里算不上地址传递
地址传递的一个约定是:如果形参叫p,函数体内只能用*p不能直接用p。否则没有预期的效果。所以这里算不上地址传递
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你传递的是地址,被调函数中,你已经找到人家门,可以布置了一番,但你什么都没做,就回来了,亲,你想返回什么?
而且返回到主调函数中时,主调函数中的p并没有变化,,所以输出的是a,,有什么不对吗,,,
而且返回到主调函数中时,主调函数中的p并没有变化,,所以输出的是a,,有什么不对吗,,,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
指针也是一个变量。在作为函数参数的时候也是把副本传进去,所以,对原指针的值(一个地址)是没有影响的,但可以改变指向的值。在涉及到指针作为参数的时候,要用指向指针的指针或者引用去解决。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char * p 就是地址传递
*p=b 就是值传递
*p=b 就是值传递
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询