C语言——数组

文章目录

  • 前言
  • 一、一维数组
    • 1.一维数组的创建
    • 2.一维数组的初始化
      • (1)整型数组
      • <1>完全初始化:
      • <2>不完全初始化:
      • <3>省略长度初始化:
      • (2)字符数组
      • (3)字符串数组
    • 3.一维数组的使用
    • 4.一维数组在内存中的储存
  • 二、二维数组
    • 1.二维数组的创建
    • 2.二维数组的初始化
      • (1)顺序全部赋初值:
      • (2)顺序部分赋初值:
      • (3)以行为基准全部赋初值:
      • (4)以行为基准部分赋初值:
      • (5)省略行数赋初值(创建二维数组可省略行数,但不能省略列数)
    • 3.二维数组的使用
    • 4.二维数组在内存中的储存
  • 三、数组名就是数组首元素的地址
    • 1.一般情况下,数组名就是首元素地址
    • 2.有两个例外
  • 四、数组形式的形参

前言

数组(array)由数据类型相同的一系列元素组成

用于识别数组元素的数字被称为下标(subscript)、索引或偏移量

通过数组下标访问数组中的元素(element),数组下标从 0 开始

地址的打印用转换说明 %p(十六进制)

二维数组:以数组为数组元素的数组

一、一维数组

1.一维数组的创建

数组类型 数组名[常量表达式];
int arr[5];

注意:

  • 数组类型 是数组中的元素的类型
  • 数组名 即数组首元素的地址
  • 常量表达式 用来指定数组的大小,注意不能放变量

2.一维数组的初始化

(1)整型数组

<1>完全初始化:

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

<2>不完全初始化:

部分初始化,未初始化的元素会被设置为 0

int arr2[5] = { 1,2 };
int arr[5] = { 0 };

<3>省略长度初始化:

省略方括号中的数字,让编译器自动匹配数组大小和初始化列表中的项数

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

C语言——数组_第1张图片

另外还有指定初始化器,如 int arr[10] = { [5] = 11 }; ,指定初始化下标为 5 的元素即数组的第 6 个元素为 11
如果指定初始化器后面有更多的值,后面的值将被用于初始化指定元素后面的元素,如 int arr[10] = { [5] = 11,12,13 }; 初始化对象为下标为 5、6、7 的三个元素

(2)字符数组

char ch1[5]={'a','b','c'};
char ch2[]={'a','b','c'};    //用strlen求数组长度,结果为随机值15

(3)字符串数组

字符串以空字符(\0)结尾

如果 char 类型的数组末尾包含一个表示字符串末尾的空字符 \0,则该数组中的内容就构成一个字符串

char ch3[5]="abc"; //数组的四个元素:a b c \0
char ch4[]="abc";  //数组长度为4(字符串末尾必有一个'\0')

3.一维数组的使用

[ ]: 下标引用操作符,(优先级为 1,即最高)

数组元素的表现形式: 数组名[下标]

int main()
{
    int arr[10] = { 0 };

    //计算数组的元素个数
    //整个数组的大小除以的一个元素的大小就是元素的个数
    int sz = sizeof(arr) / sizeof(arr[0]);

    int i = 0;
    for (i = 0; i < 10; i++)//赋值
        arr[i] = i;
    for (i = 0; i < 10; i++)//打印
        printf("%d\n", arr[i]);

    return 0;
}

C语言——数组_第2张图片

对于方括号中的常量表达式的值:

  • 在创建数组时,常量表达式的值是数组长度
  • 在访问数组元素时,常量表达式的值是数组下标,从 0 开始
//创建数组并初始化
int arr[10] = { 0 };//数组长度为10,即10个元素

//访问数组元素
arr[0] = 1;//访问第一个元素

4.一维数组在内存中的储存

一维数组在内存中是连续存放的,随着数组下标的增长,地址是由低到高变化的

转换说明 %p: 按地址的格式打印(十六进制)

int main()
{
    int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
    int i = 0;
    
    for (i = 0; i < 10; i++)
        printf("&arr[%d] = %p\n", i, &arr[i]);
    return 0;
}

C语言——数组_第3张图片

二、二维数组

二维数组:以数组为数组元素的数组

1.二维数组的创建

数组类型 数组名[常量表达式1][常量表达式2];
int arr[2][3];

2.二维数组的初始化

(1)顺序全部赋初值:

int arr1[2][3] = { 1,2,3,4,5,6 };

(2)顺序部分赋初值:

int arr2[2][3] = { 1,2,4,6 };

(3)以行为基准全部赋初值:

int arr3[2][3] = { {1,2,3},{4,5,6} };

(4)以行为基准部分赋初值:

int arr4[2][3] = { {1,2},{4,6} };

(5)省略行数赋初值(创建二维数组可省略行数,但不能省略列数)

int arr5[][3] = { {1,2,3},{4,5,6},{7,0,0} };
int arr6[][4] = { {0,0,3},{0},{0,10} };
int arr7[][3] = { 1,2,3,4,5,6,7 };

C语言——数组_第4张图片

3.二维数组的使用

int main()
{
    int arr[][4] = { {1,2},{3,4},{4,5} };
    int i = 0;
    int j = 0;
    
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 4; j++)
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

C语言——数组_第5张图片
C语言——数组_第6张图片

4.二维数组在内存中的储存

二维数组占用多个连续的内存空间

int main()
{
    int arr[][4] = { {1,2},{3,4},{4,5} };
    int i = 0;
    int j = 0;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 4; j++)
        {
            printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
        }
    }
    return 0;
}

C语言——数组_第7张图片

三、数组名就是数组首元素的地址

1.一般情况下,数组名就是首元素地址

int main()
{
    int arr[5] = { 1,2,3,4,5 };
    printf("%p\n", arr);
    printf("%p\n", &arr[0]);
}

2.有两个例外

(1)sizeof(数组名)

计算整个数组的大小,单位是字节,这时的数组名表示整个数组

(2)&数组名

取整个数组的地址,这时的数组名表示整个数组

四、数组形式的形参

在函数原型或函数定义头中,数组形式的形参(int arr[])可以替代指针形式的形参(如int* arr),即 int arr[] 形式和 int arr 形式都表示 arr 是一个指向 int 的指针*

你可能感兴趣的:(C语言,c语言,c++)