C语言指针的问题

[复制链接]
查看11 | 回复4 | 2010-8-12 14:05:54 | 显示全部楼层 |阅读模式
#include "stdio.h"
point(char *p)
{
p+=3;
}
main()
{
char a[]="abcd",*p=a;
point(p);
printf("%c",*p);
}
执行了point之后不是向后移了三个单位了吗?
为什麼输出 的结果却是a,而不是d

回复

使用道具 举报

千问 | 2010-8-12 14:05:54 | 显示全部楼层
呵呵。。。你弄错了一个概念;虽然说形参是一个指针;但其实你传递的是main() 中p 的拷贝;也就是说是p1;此时在point()函数中移动的是p1;返回主函数后,p并未移动;你可以做这样的测试;point(char *p){ p+=3; printf("%c",p);}在这样试试:point(char **p){ (*p)+=3; //此时你移动的才是原来的p指针;} 然后再运行看看;应该就OK了。。。。在联系。
回复

使用道具 举报

千问 | 2010-8-12 14:05:54 | 显示全部楼层
形参往后移了3位,实参没变,还是指向第一个元素。 也就是说形参p和实参p不是一个指针,他们指向的地址相同。函数调用的时候只是让形参p指向了实参p指向的地址
回复

使用道具 举报

千问 | 2010-8-12 14:05:54 | 显示全部楼层
使用一级指针作为参数并没有将指针地址传递出来做改变,所以调用之后,p仍然指向a,自然就输出是a.可以将point()做如下改动void point(Char **p){ *p+=3;}调用 point(&p);
回复

使用道具 举报

千问 | 2010-8-12 14:05:54 | 显示全部楼层
LZ只要把数组a的首地址做实参传给函数point然后在函数point里输出就可以得到想要的值了point(char *p){ p+=3;printf("%c",*p);}main(){ char a[]="abcd"; point(a);}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行