c语言指针问题!!

下面有一段程序,输出结果是99 1 2 3 4 ... 99。

我不明白的是,既然main()传递给g()的是p的地址,那么g()里的*q就相当于main()里的p了,*q++不就改变了p的值吗?但输出结果表明p的值未改变。请教如何解释?

#include <stdio.h>

void g(int **q)
{
**q++;
*q++;
}

void main()
{
int a[100],i,*p=a;
for(i=0;i<100;i++) a[i]=i;
for(i=0;i<100;i++)
{
*p=a[i];
g(&p);
}
for(i=0;i<100;i++)
printf("%d",a[i]);
}

第1个回答  2008-02-09
p的值是不会改变的,因为参数传递是单向的,就算传递地址,地址的值的也一样,是函数调用时临时分配的一个存储单元,只不过由于我们可以通过这个形参地址去修改实参地址指向的值,好像就是双向的了,因为他们指向的单元相同,但不是实参地址本身被修改。我纳闷的是,**q++表示原单元的内容加加,应该数组的值要变啊,怎么…只有等高人指点了
第2个回答  2008-02-09
*的优先级在++之后,所以*q++相当于*(q++),你把它改成:(*q)++ 试试。本回答被提问者采纳
相似回答
大家正在搜