先看下面两个代码
#include<stdio.h>
int main()
{
int x[1005],y[1005],sum[1005];
int n=0,i=-1;
do
{
i++;
scanf("%x%x",&x[i],&y[i]);
sum[i]=x[i]+y[i];
n=i;
}while(x[i]!=0&&y[i]!=0);
for(int j=0;j<n;j++)
{
printf("%d\n",sum[j]);
}
return 0;
}
#include<stdio.h>
int main()
{
int x[1005],y[1005],sum[1005];
int n=0,i=0;//不同之处
do
{
++i;//不同之处
scanf("%x%x",&x[i],&y[i]);
sum[i]=x[i]+y[i];
n=i;
}while(x[i]!=0&&y[i]!=0);
for(int j=0;j<n;j++)
{
printf("%d\n",sum[j]);
}
return 0;
}
为什么以上两个代码,第一个可以,而第二个就会出错。。。。
#include<stdio.h> int main() { int x[1005],y[1005],sum[1005]; int n=0,i=-1; do { i++; // =======> -1 + 1 = i = 0 scanf("%x%x",&x[i],&y[i]); sum[i]=x[i]+y[i]; // ==========> 从sum[0]开始赋值 n=i; }while(x[i]!=0&&y[i]!=0); for(int j=0;j<n;j++) { printf("%d\n",sum[j]); // 从 sum[0] 开始取值 } return 0; } #include<stdio.h> int main() { int x[1005],y[1005],sum[1005]; int n=0,i=0;//不同之处 do { ++i;//不同之处 ===========》 0 +1 = i = 1 scanf("%x%x",&x[i],&y[i]); sum[i]=x[i]+y[i]; // ==========》 从sum[1] 开始赋值 n=i; }while(x[i]!=0&&y[i]!=0); for(int j=0;j<n;j++) { printf("%d\n",sum[j]); // ======》 从 sum[0] 开始取值, sum[0] 却没有被赋值 } return 0; }
第一个i=-1,i++不应该是先执行语句再加1吗,那应该是先执行sum[-1],执行完sum[-1]后再使i=i+1; 不应该是这样吗?我理解错在哪?
@Akemo:
”i++不应该是先执行语句再加1吗“ 这句话没错,错的是你对"语句"的理解,
在这段代码里,"语句"指的就是"i++;"这一句, 而不是下面的那些(;号后面的那些已经是别人家的语句了)
@米修君: 。。好钟意的回答,赞一个!!!那第一个里面,i=-1,++i也是可以的,是吗?
@Akemo:
int i=0; printf("%d\n",i); // 0 printf("%d\n",i++); // 0 ===> 先打印i,再把i+1 printf("%d\n",i); // 1 int i=0; printf("%d\n",i); // 0 printf("%d\n",++i); // 1 ===》先把i+1, 再打印i printf("%d\n",i); // 1
@Akemo: 是的
第二个程序初始
i=0;
++i // i=1
sum[0] = ?
你输出未初始化的sum[0],自然会出错。