主题:一维数组初始化问题
zjkzxy
[专家分:310] 发布于 2011-03-29 15:06:00
以下对一维数组m进行正确初始化的是()
A int m[10]=(0,0,0,0);
B int m[10]={};
C int m[]={0};
D int m[10]={10*2};
请高手指教?
回复列表 (共3个回复)
沙发
liudan319 [专家分:3780] 发布于 2011-03-29 15:34:00
d。 变量可以初始化,一维数组也可以在定义的同时为各数组元素赋初值。
一维数组初始化的形式:
数据类型 数组名[整型常量表达式]={初值1,初值2,……};
数组中有若干个数组元素,可在{ }中给出各数组元素的初值,各初值之间用逗号分开。把{ }中的初值依次赋给各数组元素。
例如, int a[4]={ 1,2,3,4};表示把初值1,2,3,4依次赋给a[0],a[1],a[2]和a[3]。相当于执行如下语句:
int a[4];a[0]=1;a[1]=2;a[2]=3;a[3]=4;
注意,初始化的数据个数不能超过数组元素的个数,否则出错。int a[4]={1,2,3,4,5};是错误的。
一维数组的初始化还可以通过如下方法实现:
① 只给部分数组元素初始化。
static int a[4]={ 1,2};
初始化的数据个数不能超过数组元素的个数,却可以少于数组元素的个数。上述语句只给a[0]、a[1]赋了初值,即a[0]=1;a[1]=2;那么a[2]、a[3]呢?注意到关键字static,它表示a数组的存储类型为static(静态存储)。存储类型为static的变量或数组的初值自动设置为0。所以a数组中的a[2]、a[3]的初值为0。注意,在某些C语言系统(如Turbo C)中,存储类型不是static的变量或数组的初值也是0。
若数组元素的值全为0,则可以简写为:
static int a[100]={0};
它相当于:
int a[100]={0,0,0,……,0 };
100个0
② 初始化时,定义数组元素的个数的常量表达式可以省略。
int a[ ]={ 1,2,3};
若数组元素的个数定义省略,则系统根据初值的个数来确定数组元素的个数。如上例,a数组有3个数组元素:a[0]=1,a[1]=2,a[2]=3。所以,定义数组并初始化时,若省略数组元素个数的定义,则初值必须完全给出。
板凳
linruicsu [专家分:20] 发布于 2011-04-02 21:41:00
#include<stdio.h>
void main()
{
int m[10]={20},i=0;
for(i=0;i<10;i++)
printf("%d\n",m[i]);这个是成功的,所以肯定是d了
}
3 楼
cgl_lgs [专家分:21040] 发布于 2011-04-03 09:56:00
C和D都可以,但他們的數組大小都不一樣。
C的數組單元個數為1
D為10
C的所有單元(其實就一個)被初始化為0
D的第一個單元被初始化為20,其他未初始化。
本題目很不嚴謹,其實寫D代碼的人的本意是想將10個數據都初始化為2,這種表達方式在某個語言中是行得通的,但C沒有這樣的簡化語法。
我来回复