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

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

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

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),以及创建线程(每个线程执行特定任务并释放相应信号量)。
212 1
|
5天前
|
云安全 监控 安全
|
2天前
|
存储 机器学习/深度学习 人工智能
打破硬件壁垒!煎饺App:强悍AI语音工具,为何是豆包AI手机平替?
直接上干货!3000 字以上长文,细节拉满,把核心功能、使用技巧和实测结论全给大家摆明白,读完你就知道这款 “安卓机通用 AI 语音工具"——煎饺App它为何能打破硬件壁垒?它接下来,咱们就深度拆解煎饺 App—— 先给大家扒清楚它的使用逻辑,附上“操作演示”和“🚀快速上手不踩坑 : 4 条核心操作干货(必看)”,跟着走零基础也能快速上手;后续再用真实实测数据,正面硬刚煎饺 App的语音助手口令效果——创建京东「牛奶自动下单神器」口令 ,从修改口令、识别准确率到场景实用性,逐一测试不掺水,最后,再和豆包 AI 手机语音助手的普通版——豆包App对比测试下,简单地谈谈煎饺App的能力边界在哪?
|
10天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1174 7
|
1天前
|
人工智能
自动化读取内容,不会写爆款的普通人也能产出好内容,附coze工作流
陌晨分享AI内容二创工作流,通过采集爆款文案、清洗文本、智能改写,实现高效批量生产。五步完成从选题到输出,助力内容创作者提升效率,适合多场景应用。
204 104
|
12天前
|
机器学习/深度学习 人工智能 数据可视化
1秒生图!6B参数如何“以小博大”生成超真实图像?
Z-Image是6B参数开源图像生成模型,仅需16GB显存即可生成媲美百亿级模型的超真实图像,支持中英双语文本渲染与智能编辑,登顶Hugging Face趋势榜,首日下载破50万。
739 42
|
15天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
1180 41
|
3天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
332 12
|
15天前
|
人工智能 前端开发 算法
大厂CIO独家分享:AI如何重塑开发者未来十年
在 AI 时代,若你还在紧盯代码量、执着于全栈工程师的招聘,或者仅凭技术贡献率来评判价值,执着于业务提效的比例而忽略产研价值,你很可能已经被所谓的“常识”困住了脚步。
948 78
大厂CIO独家分享:AI如何重塑开发者未来十年