C语言——数组

本文详细介绍了C语言中一维和二维数组的创建、初始化方法,包括整型、字符型和字符串数组的初始化。同时,解释了数组在内存中的存储方式以及数组名作为首元素地址的规则。此外,还讨论了数组形式的形参在函数参数中的使用。
摘要由CSDN通过智能技术生成

前言

数组(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 };

在这里插入图片描述

另外还有指定初始化器,如 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;
}

在这里插入图片描述

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

  • 在创建数组时,常量表达式的值是数组长度
  • 在访问数组元素时,常量表达式的值是数组下标,从 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;
}

在这里插入图片描述

二、二维数组

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

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 };

在这里插入图片描述

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;
}

在这里插入图片描述
在这里插入图片描述

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;
}

QQ截图20230330111000

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

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 的指针*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青春无限坑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值