1. 语法

1.1. 用常量长度声明/定义数组:

元素类型 数组名[长度] 说明:

  1. 长度: 不能为变量

1.2. 用变量长度声明/定义数组

元素类型* 数组名=(元素类型)calloc(长度,sizeof(元素类型))

2. 字符串数组

2.1. 字符串结束符

  1. 当int ch[] = "600"时是将字符串的每个字符当成一个元素,同时将其他元素都赋值为空字符('\0')
  2. 数组不完全初始化的时候其他元素都是默认初始化为数值0,注意不是’\0’,故想要让一个数组元素全部初始化为’\0’的方法是:memset(数组, ‘\0’, sizeof(数组));

3. 数组的内存表现形式

3.1. 数组的实质

  1. 定义数组本质就是把对应类型的变量地址全部连续保存起来,呈现组的形势

3.2. 数组与指针的关系

  1. 通常情况下数组名就是一个指向第一个元素的指针,[]表示取偏移量
    1. 详细解释(不懂再看)
      1. C语言标准规定,当数组名作为数组定义的标识符(也就是定义或声明数组时)、sizeof 或 & 的操作数时,它才表示整个数组本身,在其他的表达式中,数组名会被转换为指向第 0 个元素的指针(地址)。 单独使用数组名字
    2. 实例
      1. 以下表达是等价的:
        int a = {1,2,3}, *p, i = 2;  
        {p=a;p[i];}=={p=a;*(p+i);}=={p=a+i;*p;}=={p=a;3}//a[0]这样的表达就是把a作为指针,取中括号内的偏移量

4. 数组的用法

4.1. 不可以进行的用法

  1. 数组名不可以重新赋值其他地址
    1. 详解(不懂再看):
      1. 总的来说,一整个数组经常会等价于第一个元素的地址,但不能用地址(指针)给整个数组赋值,因为声明这个数组的时候就已经设定了这个数组的对应地址,后面就不能再改变

4.2. 可以进行的用法:

  1. 数组名可以作为函数的参数,这是实际上就是个指针(指向第一个元素)
    1. 数组名作为函数的形参时, 数组的长度是无法被传递的. 所以数组形参通常写成这样:
      void TEST(int a[], int size){//其中数组形参也可以写成int a[10],但这个长度是无意义的
      //代码
      }
      第一个参数获得数组, 第二个参数获得数组的长度

多维数组

child::C语言二维数组及多维数组详解