格式如下:

[存储类类型] 类型说明符 [修饰符] 标识符 [=初值符][,标识符[=初值]]…

1)一维数组

格式如下:

类型说明符 标识符 [常量表达式] [={初值,初值,…}];

char 标识符[ ]=“字符串”;

标识符后跟方括号[ ]是一个一维数组的特征。定义时若数组未赋初值,则当方括号用于数组时,其括号用于数组时,其括号内必须有常量表达式,表示为数组分配内存的大小。初值缺省时数组各元素为随机值;需赋初值时,使用等号进行赋初值,后面跟花括号,花括号内使用逗号分隔的初值表。初值的个数要小于或等于常量表达式的值,初值为0的元素可以只用逗号占位而不写初值。若初值的个数少于常量表达式值,则其后的缺省项由编译器自动以0值补之。

字符型数组时例外,它允许标识符后跟的方括号内为空,但必须赋初值。赋初值用等号,初值是双引号括起的字符串。字符数组的长度由编译器自动完成,其值为串中字符数加1(多结尾符‘\0’).

示例       本例定义了8段数码管显示0~F的符号数组,以及2个用于UART操作中的字符型数组。

int Symbol[]={DIGIT_0,DIGIT_1,DIGIT_2,DIGIT_3,DIGIT_4,DIGIT_5,DIGIT_6,DIGIT_7,

                     DIGIT_8,DIGIT_9,DIGIT_A,DIGIT_B,DIGIT_C,DIGIT_D,DIGIT_E,DIGIT_F,}

char str[30];

char string[256];

1)  一维指针数组和一维数组指针

格式如下:

类型说明符  * 标识符 [常量表达式] [={地址,地址,…}];

类型说明符    (*标识符)[ ][=数组标识符];

前者是一维指针数组,本质上是一个数组,只是它的元素是指针,即数组中存放的是其变量的地址,它在字符串排序中特别有用;后者是一维数组指针或叫数组指针,它本质上是一个指针,只是该指针指向的是一个数组。指针指向数组的首地址,但指针不能指向数组中的除首地址外的其他元素的地址。也可将数组指针理解为行指针,指针变化后可指向二维数组不同的行。数组指针不需要指明所指向的数组有多少元素,所以下标方括号内可以是空的。在C语言中,数组标识符并不代表整个数组,它只作为数组的首地址,即数组第一个元素的地址。虽然指针变量的值是地址,但指针和地址是有区别的。指针是个对象,在内存中被分配有空间,只不过该对象的被容不是变量而是可变的地址,而数组标识符是已分配过内存的数组的首地址。

2)  二维数组

格式如下:

类型说明符  标识符[m][n] [={{初值表},{初值表}…}];

上述格式是m×n个元素的二维数组。标识符独立使用时,它代表的是二维数组在内存中的首地址,它与“&标识符[0][0] ”意义相同。数组标识符是一个地址变量,不能用作左值,可用在表达式中,而不可用于赋值运算符的左侧。在C语言中,二维数组在内存中的排列次序是先放第一行的的n列,再放第二行的n列,直到第m行的n列。赋初值的顺序也是按同样的序列。初始化时,某些元素的初值可以省略,缺省初值被置为0.

3)  二维指针数组

格式如下:

类型说明符   * 标识符[m][n][={ {地址表},{地址表…}}];

上述格式是m×n个元素的二维指针数组。标识符单独使用时,它代表的是指针数组的首地址。由于这个首地址的内容是指针,它指向的内容才是变量(地址变量)。因此,指针数组标识符具有二重指针性质,是一个指针的指针。指针数组标识符是一个地址常量,不能用作左值,但可作为指针赋初值。

4)  二维数组指针

格式如下:

类型说明符 (*标识符)[ ][n][=数组标识符];

上述格式是一个二维数组的指针,这个指针指向的是一个二维数组,如前面的一维数组指针的介绍,只是二位数组指针指向的数组时二维的。为了使这个指针能指向二维数组的任一个元素,说明时应给出第二个方括号中的下标常量,至于第一个方括号中的下标量无需给出,给出也不为错。

5)  多重指针

格式如下:

类型说明符    *     *     标识符[&=指针];

上述格式定义了一个多重指针变量,即指针的指针。可用一个二维指针数组的标识符为它赋初值。

凌阳教育,专注嵌入式人才培养多年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。