最近遇到了一些数组的问题,现在总结一下,希望能对大家有所帮助。
一、关于一维数组
对于一维数组的定义和初始化,大家觉得很简单根本不谑去关注,其实程序员
几乎天天在做一维数组的定义和初 化的工作,但是突然给你一个比较个性的数组初
始化形式或者一个错误的初始化形式,还真不一定能够准确的说出错误的地方。
1、定义一个一维数组的时候要注意的问题:
a.在编写程序时,数组名不能和其他变量名相同,比如 int a[10]; int a;
这就是错误的。
b. 不能在方括号中用变量来表示元素的个数,但可以是符号常数或常量
表达式。 比如: int a= 5; char str[a]; 这种形式就是错误的,
但#define max 100; int a[max]; 是正确的。
2、一维数组的初始化的问题:
a.可以只对部分元素初始化,比如 int a[10] = {1, 3,7};
b.可以不指定数组长度,比如 int b[ ] = {1,2,4};
c.可以一次性赋 0,比如 int c[10] = {0};
二、关于二维数组
关于二维数组比一维数组复杂一点,尤其是和指针联系起来就更复杂一点。
1、定义一个二维数组的时候要注意的问题:
二维数组的形式为:数组名 [下标] [下标] 其中下标应为整型常量或整型表达式,
比如 int a[4][6]; int a[i][j]; int a[5-1][3*4] ; 这些形式都是对的。
2、二维数组的初始化的问题:
a.按行分段赋值,比如 int a[2][3] = {{1,2,3},{4,5,6}};
b.按行连续赋值,比如 int a[2][3] = {1,2,3,4,5,6};
c.在初始化的时候可以只对部分元素赋初值,未赋初值的元素自动取0值,
比如 int a[3][4] = {{1},{2},{3}};
d.如果对全部元素赋初值,则第一维的长度可以不给出,比如
int a[3][2] = {1,2,3,4,5,6}; 等价于 int a[ ][2] = {1,2,3,4,5,6};
三、关于字符数组
字符数组允许在定义时做初始化赋值,赋初值的方法一般有两种:一是直
接给定义好的字符数组赋值;二是给定义的字符指针变量赋值。但有两点规则:
当赋值给定义的字符型指针变量时,可以使用双引号的字符串直接赋值;当赋
值给定义的字符数组时,只能通过对其元素赋值,或在数组时进行初始化。而
且定义的数组空间应该足够大,能存下整个字符串和就结束标识符'\0’。
四、一些典型的数组赋值的情况总结
1、int a[2][2] = {{1},{2}};这种赋值是正确的, 表示只对部分元素赋值,
未赋值元素自动取0。
2、int a[ ][2] = {1,2,3,4};这种赋值是正确的,表示 对全部元素赋值,
则第一维的长度可以不给出。
3、int a[2][2] = {{1},2,3}; 这也是正确的,表示第一行元素是1和0,其他的元素是第二行元素。
4、int a[ 2][ ] = {{1,2},{3,4}}; 这是错误的,定义数组时第2维数不能省略。
5、 char a[5] = "good!";这是错误的,空间不够,不能放下'\0'.
6、char a[ ] = "good!" ; 这是正确的
7、char *str = "good!" ; 这是正确的
8、char str[5] = {'g','o','o','d'};这是正确的
9、char str[2] = {"s","d"}; 这是错误的,{"s","d"}中的每对“”都代表一维,这里应该对应二维数组
10、char str[2][3] = {"a","b"};这是正确的
11、char str[ ] = {"a","b"};这是错误的