*pi+=2;pi+=2;*pi+=2; 指针问题求解
#include <stdio.h>main()
{
void change_p(int *pi);
int *p;
int a[]={1,4,7,10};
p=&a[1];
change_p(p);
printf("%d\n",*p);
}
void change_p(int *pi)
{
*pi+=2;
pi+=2;
*pi+=2;
}
求解?
[[it] 本帖最后由 xiaofeixia99999 于 2008-6-4 15:38 编辑 [/it]]
----------------解决方案--------------------------------------------------------
#include <stdio.h>
main()
{
void change_p(int *pi);
int *p,a[]={1,4,7,10};
p=& a[1];
change_p(p);
printf("%d\n",*p);
}
void change_p(int *pi)
{*pi+=2;
pi+=2;
*pi+=2;
}
----------------解决方案--------------------------------------------------------
我这结果是6
;掉了!
[[it] 本帖最后由 wltysy 于 2008-6-4 15:40 编辑 [/it]]
----------------解决方案--------------------------------------------------------
呵呵.是呀.运行结果是6.
但就是不理解.
请高手解释一下
----------------解决方案--------------------------------------------------------
回复 4# liyanhong 的帖子
哈!偶是小菜,只能这样! ----------------解决方案--------------------------------------------------------
同一级别的
----------------解决方案--------------------------------------------------------
[bo][un]liyanhong[/un] 在 2008-6-4 15:36 的发言:[/bo]
void change_p(int *pi)
{
*pi+=2; //这里*pi+2也就是说a[1]+=2;
pi+=2 ...
//这里你把pi的地址加2了……pi已经不在是a[1]的地址了,后面就不要说了吧 void change_p(int *pi)
{
*pi+=2; //这里*pi+2也就是说a[1]+=2;
pi+=2 ...
----------------解决方案--------------------------------------------------------
回复 8# smltq 的帖子
这个还是不理解.我觉得可能是*pi+=2没有算.
只有pi+=2算了.
不然不会只等于6
照你那样说.你能说说为什么后面同样是*pi+=2;
后面一个为什么没有算吗
----------------解决方案--------------------------------------------------------
void change_p(int *pi)
{
*pi+=2;//这里a[1]=4+2
pi+=2;//你拿指针的值来加……pi已经不在指向a[1]了,已经指向a[3]了
*pi+=2;//你把a[3]的值加2了
}
----------------解决方案--------------------------------------------------------
你打印的是p指针所指向的内容也就是a[1]当然是6喽
----------------解决方案--------------------------------------------------------