想要了解数组吗?进来看看(上)

简介: 想要了解数组吗?进来看看(上)

本片博客会从以下几个方面带大家了解一下数组

1.一维数组的创建和初始化;2.一维数组的使用;3.一维数组在内存中的存储

4.二维数组的创建和初始化;5.二维数组的使用;6.二维数组在内存中的存储

7.数组越界;8.数组作为函数参数;


接下来本博主带大家一一领略


一、一维数组的创建和初始化


数组是一组相同类型元素的集合。

数组的创建方式:

type_t   arr_name   [const_n];

// type_t 是指数组的元素类型

//arr_name指数组名

// const_n 是一个常量表达式,用来指定数组的大小

这里我们注意:

C99 标准之前 数组的大小只能是常量表达式

C99 标准中引入了:变长数组的概念,使得数组在创建的时候可以使用变量,但是这样的数组不能初始化

下面就是一个简单数组创建:


1. int arr1[10];
2. char arr1[];


数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。

下面是数组的简单初始化:


1. int arr1[10] = {1,2,3,4,5,6,7,8,9,10};//完全初始化
2. int arr2[10] = { 1,2,3 };//不完全初始化,剩余的元素默认都是0
3. int arr3[10] = { 0 };//不完全初始化,剩余的元素默认都是0
4. int arr4[] = { 0 };//省略数组的大小,数组必须初始化,数组的大小是根据初始化的内容来确定
5. int arr5[] = { 1,2,3 };
6. char arr1[] = "abc";//一个元素
7. char arr2[] = {'a', 'b', 'c'};//三个元素
8. char arr3[] = { 'a', 98, 'c' };


初始化时一定是需要给一些合理的初始值


int arr6[];//错误初始化


二、一维数组的使用


数组必须先定义,然后使用。C 语言规定,只能逐个引用数组元素,而不能一次引用整个数组。前面讲过,数组元素的表示形式为:

数组名[下标];

下标可以是整型常量或整型表达式,比如:

a[0] = a[5] + a[7] - a[2 * 3];

千万要注意,定义数组时用到的“数组名[常量表达式]”和引用数组元素时用到的“数组名[下标]”是有区别的,定义数组时的常量表达式表示的是数组的长度,而引用数组元素时的下标表示的是元素的编号。比如:

1. arr[5]={1,2,3,4,5}
2. //表示有五个元素,分别存储1,2,3,4,5
3. //下标从0开始,到你所定义的数组长度-1结束,此处是5;
4. //a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5;

关于数组在scanf()与printf()中的使用,一般借助for语句

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


这里注意:由于在使用时表示的时元素的编号,所在输入时要加上&


三、一维数组在内存中的存储


数组在内存中的存储是连续的,我们写一个代码给大家看一下就明白了


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

这时候我们运行一下

打印坐标后我们发现每个坐标中间相差4,那是因为我们这里用的是int,所以占4个字节

仔细观察输出的结果,可知随着数组下标的增长,元素的地址,也在有规律的递增。 由此可以得

出结论:数组在内存中是连续存放的

 

总结:

  1. 数组在内存中开辟是线性连续且递增的。
  2. 在c语言中,任何变量(基本变量,指针变量,结构体变量,数组变量)的空间都是整体开辟,但任何元素的起始地址一定是开辟字节当中最小的。


四、二维数组的创建和初始化


二维数组的创建

1. //数组创建
2. int arr[3][4];//[行数][列数]
3. char arr[][5];
4. double arr[2][4];

二位数组的初始化

1. //数组初始化
2. int arr[3][4] = {1,2,3,4};
3. int arr[3][4] = {{1,2},{4,5}};
4. int arr[][4] = {{2,3},{4,5}};

注意:

花括号中的一个花括号代表一个一维数组的初始化。当里面无花括号分组时,按照顺序从第一个开始逐个进行初始化。余下的未赋值的元素用0初始化


五、二维数组的使用


二维数组的使用也是通过下标的方式,用双重循环嵌套进行索引使用。 看代码:

1. #include <stdio.h>
2. int main()
3. {
4.  int arr[3][4] = { 0 };
5.  int i = 0;
6.  for (i = 0; i < 3; i++)
7.  {
8.    int j = 0;
9.    for (j = 0; j < 4; j++)
10.     {
11.       arr[i][j] = i * 4 + j;
12.     }
13.   }
14.   for (i = 0; i < 3; i++)
15.   {
16.     int j = 0;
17.     for (j = 0; j < 4; j++)
18.     {
19.       printf("%d ", arr[i][j]);
20.     }
21.   }
22.   return 0;
23. }
相关文章
利用信号量实现线程顺序执行
【8月更文挑战第24天】本文介绍了如何运用信号量确保多线程程序中线程按预定顺序执行的方法。信号量作为同步机制,可有效控制共享资源访问,防止数据不一致。实现步骤包括:引入必要的头文件(如 `&lt;pthread.h&gt;` 和 `&lt;semaphore.h&gt;`),定义信号量变量(如 `sem_t` 类型),初始化信号量(通常第一个信号量设为1,其余设为0),以及创建线程(每个线程执行特定任务并释放相应信号量)。
182 1
|
7天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
1天前
|
弹性计算 人工智能 安全
云上十五年——「弹性计算十五周年」系列客户故事(第二期)
阿里云弹性计算十五年深耕,以第九代ECS g9i实例引领算力革新。携手海尔三翼鸟、小鹏汽车、微帧科技等企业,实现性能跃升与成本优化,赋能AI、物联网、智能驾驶等前沿场景,共绘云端增长新图景。
|
6天前
|
人工智能 自然语言处理 自动驾驶
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
|
6天前
|
云安全 人工智能 自然语言处理
阿里云x硅基流动:AI安全护栏助力构建可信模型生态
阿里云AI安全护栏:大模型的“智能过滤系统”。
|
Linux 虚拟化 iOS开发
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
1115 4
|
9天前
|
存储 机器学习/深度学习 人工智能
大模型微调技术:LoRA原理与实践
本文深入解析大语言模型微调中的关键技术——低秩自适应(LoRA)。通过分析全参数微调的计算瓶颈,详细阐述LoRA的数学原理、实现机制和优势特点。文章包含完整的PyTorch实现代码、性能对比实验以及实际应用场景,为开发者提供高效微调大模型的实践指南。
712 2
|
7天前
|
编解码 自然语言处理 文字识别
Qwen3-VL再添丁!4B/8B Dense模型开源,更轻量,仍强大
凌晨,Qwen3-VL系列再添新成员——Dense架构的Qwen3-VL-8B、Qwen3-VL-4B 模型,本地部署友好,并完整保留了Qwen3-VL的全部表现,评测指标表现优秀。
588 7
Qwen3-VL再添丁!4B/8B Dense模型开源,更轻量,仍强大