C语言
#include <stdio.h>void main()
{
int a={1};
int i;
scanf("%d",&a);
for(i=1;i<=3;i++)
a=a+a;
printf("a=%d\n",a);
}
这个程序我找到一处不对的,i<3;
我还有一点不明白为什么要用scanf呢,是不是给a赋初值 for(i=1;i<=3;i++) // 循环次数没问题
&a == &a // 是同一个地址 , 所以&a 是给 a赋值。
先不说你理不理解,这本来就是一段问题代码。
#include <stdio.h>
void main()
{
int a={1};
int i;
scanf("%d",&a);
for(i=0;i<3;i++)
a=a+a;
printf("a=%d\n",a);
} scanf用法有点问题,这样写会有语法警告,但不是语法错误,这样是给 a 赋值,而不是 a 。
你所找出的错误 i<=3,的确有下标越界,但是下标越界算不算语法错误,与编译器有关,有的编译器不允许下标越界,会报错;但是有的编译器允许下标越界,这样的编译器下标越界不报错,但是运行结果可能会不对,因为越界单元所取出来的值是不受控的,不知道会是什么值。
另外数组a,只有a赋初值了,其他单元都没有赋初值。虽然能有运算,但是相加结果是什么呢?这是不确定的,因为a和a的值不确定 1.在scanf里,数组前不需要加&
2.在for循环那里,要改成i<3
#include <stdio.h>
void main()
{
int a={1};
int i;
scanf("%d",a);
for(i=0;i<3;i++)
a=a+a;
printf("a=%d\n",a);
}
页:
[1]