main()
{ char*b[4]={'a','b','c','d'},*p=b;
point(p);
printf("%c\n",*p);
}
俺怎么看都觉得应该输出一个D呀,可它就偏偏输出一个A,
这家比俺还倔~~~~~~~
同志们辛苦讲解一下!谢谢!
知道这里的人都热心,好幸福哟~~~~~~
int point(char*p)
{
*p+=3; //搂主要的是地址加3,这怎么变成值加3了?
}
int main()
{
char b[4]={'a','b','c','d'};
char *p=b; //指针可以直接被赋予数组的值吗?
point(p);
printf("%c\n",*p);
}
可怜的人啊。
我就说一句,C语言的函数都是传值的。
汗一个先,先说2楼的程序,两个函数都是int的没有返回值,
如果如三楼所说,楼主需要的是地址加3,那么4楼就错了,*p+=3; 就是*p值加3
所以说,二楼的程序,最后b数组变成{'d','b','c','d'}, 所以最后会输出'd',
再说5楼,你说了一句很经典的话,其实只要把传任何东西都看成传值就好了
如果楼主是想地址+3,即使p指向b[3]的话,在2楼的基础上这样改就可以了。
void point(char**p) //用指向指针的指针
{
*p+=3; //*p还是一个指针,所以是指针+3,最后*p指向b[3]
}
int main()
{
char b[4]={'a','b','c','d'};
char *p=b;
point(&p);
printf("%c\n",*p);
printf("%c\n",b[0]);//b[0] = 'a' ,没有改变
return 0;
}
回6楼,你要知道[]比*的优先级高
回7楼,*P+=3 是值+,所以是d,p+3是地址+,所以是'e'.
[此贴子已经被作者于2007-7-7 13:18:57编辑过]
可怜的人啊。
我就说一句,C语言的函数都是传值的。
说的相当好!
子函数的指针p和主函数的指针p是不一样的,子函数改变了指针的指向,但是主函数中的p还是指向数组的首地址