一维数组(数值型数组)(eg:arr[10])

简介: 大家肯定对数组已经不陌生了,都见到过数组,比如arr[10] = {1,2,3,4,5,6,7,8,9,10};装的是整数。那么下面我们讲会系统的讲一下 一维数组的知识点。(针对数值型数组)首先我们需要了解什么是数组?

大家肯定对数组已经不陌生了,都见到过数组,比如arr[10] = {1,2,3,4,5,6,7,8,9,10};

装的是整数。那么下面我们讲会系统的讲一下 一维数组的知识点。(针对数值型数组

首先我们需要了解什么是数组?


1.数组的创建

1.1数组的概念:一组相同类型的元素的集合。

1.2数组的创建方式

type_t  name   [const_n]
type_t //数组的元素类型
name  // 数组名字
const_n   //数组的大小,长度


例如

int arr[10];
char ch[10];
float arr2[5];
double arr3[7];

以上就是对数组进行创建的方式。

上面数组的大小都是常量,那我们可不可以这样写?

int n = 10;
int arr[n];

数组创建,在C99标准之前, [] 中要给一个常量才可以,不能使用变量。在C99标准支持了变长数组的概念,数组的大小可以使用变量指定,但是数组不能初始化。

1.2 数组的初始化


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

int arr[10] = {1,2,3,4};
int arr2[] = {1,2,3};
int arr3[5] = {1,2,3,4,5};
char arr4[3] = {'a',98,'c'};
char arr5[] = {'a','b','c'};
char arr6[] = "abcdef";

我相信大家看到这里肯定会有疑问

第一个数组是10个长度,我们却初始化4个元素,那后六个元素是什么,还是不存在?

第二个数组没有定义长度,那他的大小是什么?

我们可以通过程序运行一下

我们可以看到这里数组的长度还是10,数组元素初始化的部分是1 2 3 4,没有初始化的部分是0;

我们再来看第二个程序

这里我们没有在数组里定义他的大小,直接初始化元素,这时候数组长度为3,元素为1 2 3.


由此我们可以得到这样的一个结论


当数组创建时,定义了长度多长,数组的长度就是多长,当我们一旦初始化数组元素,未初始化的元素默认为0;但是当我们没有初始化数组,数组元素为随机值。


如果我们没有定义长度,那么我们初始化的元素个数就是数组的长度。


(大家可以自行测试一下)

1.3数组的引用

关于数组的引用需要注意的一点:

只能引用数组的某一元素,不能一次整体调用数组的全部元素。


1.3.1下标引用操作符  []

我们引用数组的时候需要用到下标引用操作符  []

我们要知道数组的下标是从0开始的


比如 这个数组有五个元素,那么第一个元素要引用出来就是arr[0],以此类推,所以我们要找哪个元素就去找其对应的下标就行。

int arr[5] = {1,2,3,4,5}
//            0 1 2 3 4
int a = arr[0];


大家肯定有这个疑问,我们在定义数组的  []   和引用元素的   []  是一样的吗?


很显然不是


int arr[10];    这个是定义数组,所以[]表示的是数组元素的个数;


a = arr[5];    这个是引用数组元素,表示的是引用arr数组中下标为5的元素。


他们俩的最大区别就是有无数据类型。

1.4一维数组在内存中的存储

我们现在了解了数组的创建,初始化和引用。那么数组在内存中是怎样存储的呢?数组每个元素的地址是怎样变化的呢?

看下图

我们可以看到数组的五个元素在内存中的地址是逐渐增加4的


我们这里只需要知道数组在内存中是连续存放的,并且随着数组下标的增大,地址也有规律的变大。

关于sizeof()和strlen我们会专门在一期博客给大家解答。

相关文章
|
数据采集 运维 监控
|
存储 监控 NoSQL
一篇搞定Redis中的BigKey问题
BigKey的具体表现是redis中的key对应的value很大,占用的redis空间比较大,本质上是大value问题。
1624 0
|
Linux pouch 容器
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
关于如何在CentOS 7.6操作系统上安装和使用阿里巴巴开源的Pouch容器管理工具的实战教程。
307 2
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
ly~
|
12月前
|
监控 Linux API
如何评估 SDL 图形库优化的效果
SDL(Simple DirectMedia Layer)是一个免费开源的多媒体开发库,广泛用于游戏和多媒体应用。优化后的SDL在性能、图像质量、加载速度、兼容性、跨平台性和开发效率等方面均有显著提升。性能方面,优化后的SDL提高了渲染效率和播放路数;图像质量上,通过先进的渲染技术提升了图像的清晰度和色彩准确性;加载速度方面,通过减少格式转换时间加快了图像加载速度;兼容性和跨平台性得到增强,支持多种操作系统和硬件设备;开发效率方面,简洁的API设计和丰富的文档帮助开发者快速上手,减少了开发时间和成本。这些优化使SDL成为游戏开发和多媒体应用的理想选择。
ly~
455 4
|
机器学习/深度学习 人工智能 自然语言处理
AIGC技术革新:智能创造如何重塑艺术与设计行业
AIGC技术,人工智能生成内容,正引领艺术与设计行业的变革。借助深度学习和自然语言处理等技术,AIGC能自动生成文本、图像等内容,丰富创作手段并提供创新机会。在艺术领域,它模拟各种风格作品,助力高效创作;在设计领域,它根据用户需求生成设计方案,提升个性化选择。AIGC打破了传统界限,提高了创作效率,并满足了用户的个性化需求。未来,随着技术进步和应用场景拓展,AIGC将在虚拟现实等领域的结合中,为艺术与设计带来更沉浸式、交互式的体验,重塑行业未来。【6月更文挑战第4天】
1254 1
|
SQL Java 数据库
Activity7整合springboot:流程部署,定义,实例(一)
Activity7整合springboot:流程部署,定义,实例(一)
|
机器学习/深度学习 数据可视化 Python
NumPy 均匀分布模拟及 Seaborn 可视化教程
本文介绍了均匀分布和逻辑分布。均匀分布是连续概率分布,所有事件在指定范围内有相等概率发生,常用于随机数生成。其概率密度函数为 `f(x) = 1/(b-a)`,其中 a 和 b 分别为下限和上限。NumPy 的 `random.uniform()` 可生成均匀分布的随机数。Seaborn 可用于可视化分布。文中还提供了练习及解决方案,包括生成不同范围的均匀分布随机数、比较分布形状变化及模拟抛硬币实验。逻辑分布则常用于 S 形增长现象的建模,其 PDF 为 `(scale / (π (1 + (x - loc) / scale)^2))`,由位置参数 loc 和尺度参数 scale 定义。
226 0
|
机器学习/深度学习 自然语言处理 算法
【天幕系列 03】深度学习领域的最新前沿:2024年的关键突破与趋势
【天幕系列 03】深度学习领域的最新前沿:2024年的关键突破与趋势
1688 3
|
SpringCloudAlibaba Java 数据库
SpringCloud Alibaba微服务 -- Seata的原理和使用
SpringCloud Alibaba微服务 -- Seata的原理和使用
|
设计模式 Java 测试技术
Spring依赖注入的魔法:深入DI的实现原理【beans 五】
Spring依赖注入的魔法:深入DI的实现原理【beans 五】
807 0