回 帖 发 新 帖 刷新版面

主题:一维数组初始化问题

以下对一维数组m进行正确初始化的是()
A int m[10]=(0,0,0,0);
B int m[10]={};
C int m[]={0};
D int m[10]={10*2};
请高手指教?

回复列表 (共3个回复)

沙发

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。所以,定义数组并初始化时,若省略数组元素个数的定义,则初值必须完全给出。

板凳


#include<stdio.h> 
void main()
{
    int m[10]={20},i=0;
    for(i=0;i<10;i++)
        printf("%d\n",m[i]);这个是成功的,所以肯定是d了
}

3 楼

C和D都可以,但他們的數組大小都不一樣。
C的數組單元個數為1
D為10
C的所有單元(其實就一個)被初始化為0
D的第一個單元被初始化為20,其他未初始化。

本題目很不嚴謹,其實寫D代碼的人的本意是想將10個數據都初始化為2,這種表達方式在某個語言中是行得通的,但C沒有這樣的簡化語法。

我来回复

您尚未登录,请登录后再回复。点此登录或注册