指针的地址传递

来源:百度知道 编辑:UC知道 时间:2024/05/22 13:48:56
有以下程序
point(char*p)
{ p+=3;}
main()
{
char b[4]={'a','b','c','d'},*p=b;
point(p);
printf("c\n",*p);
}

输出结果是 a
。。。。。。。。。。。。。。。。。。
如果想使输出结果是 d

使用p的地址进行传递,调用point()后,使p指向‘c’,怎么改?
。。。。。。。。。。。。
有试过point(char **p){*p+=3;},point(&p)。。。。
不过好像不行。。。。。。一楼编译通过没? 二楼也没有真正的地址传递吧,只是返回了一个新指针。。。。
-------------------------------------------------------------------

这只是一个**年二级选择题。。。。。。
只是想到了该怎样传递指针的地址。
看了这么多,好像不太可能了。除了引用,就只能返回一个新的指针值。。。

建议楼主改学别的。三百六十行,行行出状元。干嘛和c++过不去呢?

lin_victor163 - 试用期 一级 用引用是正解,另外用指针的指针也可。最符合楼主的意图。
超链分析 提供了另外一种解决方法。

point(char *p) 这个调用是指针的值传递。
{ p+=3;}此处的p和main的p是两回事,调用是生成一个零时变量 char *p,把main里的p赋值给它。所以改变不了。

char b[4]={'a','b','c','d'},*p=b; 这样声明是个很恶劣的习惯,有的编译器可能会把p作为常量。可能是编译通不过原因之一。
搞在一行没任何意义,对于时间或空间效率没任何的影响。
把*p=b 另做一行,这样可读性好。

恩 修改了下
point(char **t)//这里用t用p还是用其他名字都无所谓,参数是一个二级指针,也就是一个地址变量的地址
{*t+=2;} //将该地址变量增加2个存储单位

main()
{
char b[4]={'a','b','c','d'},*p=b;
point(&p);//将p的地址传递进函数
printf("%c\n",*p);
}

将一个变量的指针传递进函数,然后在函数中通过对该指针解除引用进行一些操作,可以改变该变量的值

现在我们要改变的变量本身是一个指针,那么只要把这个指针的地址传递进函数,然后对这个地址解除引用(也就是*操作符)来改变指针的值

point(char*p)
{ p+=3;}
main()
{
char b[4]={'a','b','c','d'},*p=b;
point(p);
printf("c\n",*p);