C语言,关于函数,不知道这个值是怎么得到的呢,谁能帮忙看一下谢谢!

来源:百度知道 编辑:UC知道 时间:2024/06/24 05:08:03
运行后,这段程序的值为7,可是我怎么也算不到是7啊.
还有,P1,P2在形参那是什么类型呢? 下面的" int *p1, *p2;",是补定义形参吗?谢谢啦,急~

#include "stdio.h"
#include "conio.h"
void f( p1, p2)
int *p1, *p2;
{
int i,j;
*p2 = 0;
for ( i = 0;i < 3; i++ )
for (j = i; j < 3; j++ )
*p2 += *( p1 + i * 3 + j );
return;

}

main()
{
int a[3][3] = { {1,2}, { 3,4}, { 5,6 }};
int s;
f( a,&s);
printf ("%d",s);
getch();
}
他的循环体我清楚啊,但第二次循环从J=1开始,那P2=P2+*(P1+3+1),J=2时,P2=P2+*(P1+3+2)对吧,相等的你理解是s=3+a[1][1]+a[1][2]=3+4+0=7,我实在想不出他是怎么指向下一下数组的a[1]、a[2]的。 请指导,谢谢,等您的回复

关于那题为什么这样写,是一本练习书上的,我个人也觉得很不规范,但在WIN TC可以运行....

我又用VC6.0重新写了一个相似程序,跟踪了每一步。
这个程序应该是指针越界的原因。当i =0时,循环是正确的。可当i = 1时,j=1后,*((p1+i*3)+j)却等于了4,这很有可能是因为*((p1+3)+j)已经越界。后面的更不用说,肯定越界了。但为什么*((p1+3)+j)=4,这有可能是系统的原因。

如果P1和P2都是指针的话,那么f( a,&s); 中的a也应该是 &a呀!~!~