一维数组
其一般形式为: 类型名 数组名 [数组长度] = {初值表}
注:虽然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]);
}
}
才疏学浅,实在不敢叫什么技术贴,也就是个学习随笔。
若有错误,还望大神不吝赐教。