c语言数组,static疑问
我在定义数组,输出数组时,试过几种不同情况:
1:
main()
{int a[10];
int i;
for(i=0;i<10;i++)
printf("%d,",a[i]);
}
只定义,不赋初值,输出为-858993460,-858993460。。。。。(10个)
main()
{int a[10]={1};
int i;
for(i=0;i<10;i++)
printf("%d,",a[i]);
}
赋初值,输出1,0,0,。。。。。
main()
{int a[10];
a[0]=1;
int i;
for(i=0;i<10;i++)
printf("%d,",a[i]);
}
a[0]=1在前,int i在后,错误
main()
{int a[10];
int i;
a[0]=1;
for(i=0;i<10;i++)
printf("%d,",a[i]);
}
int i在前,a[0]=1在后,输出1,-858993460,。。。。
main()
{static int a[10];
int i;
a[0]=1;
for(i=0;i<10;i++)
printf("%d,",a[i]);
}
数组定义加static,并且int i在前,a[0]在后,输出。1,0,0.。。。。。
问题,如果要输出正常,必须数组定义时,初始化赋值。如果只是初始化,不赋值,就必须数组定义是static。请问这是为什么?另外,在本例子中,一定要int i在前,a[0]=1,在后,不然就报错,问什么呢?
[解决办法]
C语言中,先声明变量,初始化在后面。
int a[10];
a[0]=1;
int i;
这个应该int i在a[0]=1的前面。
数组使用的时候先初始化,防止读取出现错误的值。你可以memset来把数组全部置0.
[解决办法]
(1)先来介绍它的第一条也是最重要的一条:隐藏.
(2)static的第二个作用是保持变量内容的持久.
(3)static的第三个作用是默认初始化为0.
好好的领会它的内在含义。