汗一个先,先说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'.
学到东西,谢谢
int point(char*p)
{
*p+=3;
}
int main()
{
char b[4]={'a','b','c','d'};
char *p=b;
point(p);
printf("%c\n",*p);
}
我运行
输出 : d
是按地址传送 MAIN()调用point() ,potint()改变p地址指向 所以变成d
应该是这样
函数point 是int类型,要返回值的吧?
我不知道你们用的是什么C语言,我用VC,代码是不是因该这样
#include <stdio.h>
void point(char *p)
{
*p += 3;
}
void main()
{
char b[4]={'a','b','c','d'};
char *p = b;
point (p);
printf ("%c\n", *p);
}