[bo][un]xiaofeixia99999[/un] 在 2008-6-4 17:31 的发言:[/bo]
这个还是不理解.
我觉得可能是*pi+=2没有算.
只有pi+=2算了.
不然不会只等于6
照你那样说.你能说说为什么后面同样是*pi+=2;
后面一个为什么没有算吗
这个还是不理解.
我觉得可能是*pi+=2没有算.
只有pi+=2算了.
不然不会只等于6
照你那样说.你能说说为什么后面同样是*pi+=2;
后面一个为什么没有算吗
#include <stdio.h>
void change_p(int *pi)
{
*pi+=2;
pi+=2; // 只有这个是通过指针传值,改动影响了实参
*pi+=2;
printf("%d\n",*pi);
}
main()
{
int *p,a[]={1,4,7,10};
p = &a[1];
change_p(p);
printf("%d\n",*p);
}
因此上述代码只是把数组改成a[]={1,2,7,10};
然后p = &a[1];这个指向仍来不变,但是子函数内部就是能看成这个后面的后面的*pi+=2;也参加运算了
----------------解决方案--------------------------------------------------------
不要争了,运行一下不就知道了。
运行结果6
数组a变成{1, 6, 7, 12}
----------------解决方案--------------------------------------------------------
两个人说的都有道理
不知道该听谁的.
----------------解决方案--------------------------------------------------------
弄明白值传递和指针传递就能理解了.
简单的说
void change_p(int *pi)中,
pi是一个新建的指针变量。
pi的改变并不会改变原参数。
而 *pi 所指向的内容就是数组a的元素。
[[it] 本帖最后由 zzf20cn 于 2008-6-6 17:15 编辑 [/it]]
----------------解决方案--------------------------------------------------------
回复 11# vfdff 的帖子
不明白啊!如果只是pi+=2改变了实参,p就指向了a[3],那程序最后完后运行完后数组怎么改变成{1,6,7,12}啊? ----------------解决方案--------------------------------------------------------
回复 15# wltysy 的帖子
请仔细看看题目! ----------------解决方案--------------------------------------------------------
11111111
----------------解决方案--------------------------------------------------------
在函数中,指针只能改变它所指向的值,而不能改变它自身的指向.
----------------解决方案--------------------------------------------------------