C语言数组的初始化


一维数组


其一般形式为:  类型名    数组名    [数组长度]     =     {初值表}

注:虽然C语言规定,只有静态存储的数组才能初始化,但一般的C编译系统都允许对动态存储的数组赋初值

对静态数组初始化:

static int a[5] = {1,2,3,4,5};

若没有对静态数组初始化,则系统会默认给其数组元素赋初值0

static int a[5];
//等价于
static int a[5] = {0,0,0,0,0};

也可以只针对部分元素进行初始化:

static int a[5] = {0,1,2};
//等价于
static int a[5] = {0,1,2,0,0};

但是如果不是静态数组,那么数组数组元素的值就是不确定的了。(其实是多少与你用的编译器有关,比如vc6.0会把它初始化位十六进制数cc)
如:

int a[5] = {0,1,2};
//此数组的前三个元素是确定的0,1,2。但无法确定后两个元素

若对数组的全部元素都赋了初值,则可以省略长度:

int a [] = {1,2,3,4,5,6,7,8,9,10};
//等价于
int a [10] = {1,2,3,4,5,6,7,8,9,10};

注:虽然这样写在编译时不会报错,但从程序的可读性出发,不建议这样写。
不管有没有对全部元素赋初值,都不应该省略数组长度。

字符型数组比较特殊,若赋的初值是一字符串的话,会默认在结尾加 ‘\0’

char a[10] = "Hello";
//等价于
char a[10] = { 'H', 'e', 'l', 'l', 'o', '\0' };
//故此数组长度为6个字节
char a[10] = { 'H', 'e', 'l', 'l', 'o' };
//此数组长度为5个字节

字符数组中的字符串可以整体输入输出,用到%s,或gets(),puts()


动态初始化:

//循环赋值
int a[10];
int i;

for(i = 0 ; i < 10 ; i++){
    scanf("%d" , &a[i]);
}


----------
//gets()赋值
char a[100];
int i;
gets(a);

二维数组


其一般形式为:  类型名    数组名    [行长度]    [列长度]     =     {    {初值表0}    {初值表1}    {初值表2}    ……..}

int a [3][3] = { {1,2,3} , {4,5,6} , {7,8,9} };
//输出样式:
// 1  2  3
// 4  5  6
// 7  8  9

二维数组也可以只对部分元素初始化:

static int a[3][3] = { {1,0,2} , {} , {3} };
//输出样式:
// 1  0  2
// 0  0  0
// 3  0  0
//等价于
static int a [3][3] = { {1,0,2} , {0,0,0} , {3,0,0} };

也可以直接赋初值,不用分行:

static int a [3][3] = { 1, 2, 3, 0, 0, 0, 4};
//输出样式:
// 1  2  3
// 0  0  0
// 4  0  0
//等价于
static int a [3][3] = { {1,2,3} , {0,0,0} , {4} };

同一维数组一样,二维数组如果不是静态数组,那么数组数组元素的值就是不确定的了

如果列出了全部元素,就可以省略行长度:

int a [][3] = { {1,2,3} , {4,5,6} , {7,8,9} };
//等价于
int a [][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};
//等价于
int a [3][3] = { {1,2,3} , {4,5,6} , {7,8,9} };
//等价于
int a [3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};

注:一定不能省略列长度。
建议写代码时都不要省略。

动态初始化:

//循环赋值
int a[10][10];
int i,j;

for(i = 0 ; i < 10 ; i++){
    for(j = 0 ; j < 10 ; j++){
        scanf("%d" , &a[i]][j]);
    }
}   

才疏学浅,实在不敢叫什么技术贴,也就是个学习随笔。
若有错误,还望大神不吝赐教。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值