【C/C++教学】浅谈数组(上)

简介: 【C/C++教学】浅谈数组(上)

C/C++的精髓就在于,跟它一比,

什么灰机昏啊膏素也显得那么生动活泼…

正在被C++欺负吗?

那就快进来看看吧

微信图片_20220420151705.jpg

本节纲要

0


1)一维数组

2)指针数组

3)数组指针

What is 数组?

数组的定义


在编程中,为了处理成批数据类型相同的数据,c语言提供了一个处理工具即数组,把具有相同类型的若干数据有序的组织起来。这些按序排列的同类数据元素的集合就是这种类型的数组。


数组在内存中占有一片连续的存储空间,因为数组里元素的类型一致,即不存在内存对齐问题(关于内存对齐下次再说吧),所以这个存储空间的大小自然就是元素的个数乘以数据类型对应的字节大小。


一维数组

说明格式

类型 标识符(数组名)[数组长度表达式]


e.g. int array[3] 就是定义了一个数组名为array的有三个整型元素的数组


几点说明

1)这个类型可以是我们的基本数据类型(int,float,char,int*等),也可以是我们自定义的数据类型(结构体等)


2)这个长度表达式必须为常量整型表达式(也可以是提前定义的用const约束的变量),不能是变量,浮点数等,即最终的结果必须是一个确定的整数!


初始化

int array[3] = {1,11,111};

//定义的时候就赋值

此时array[0]=1,array[1]=11,array[2]=111;

注意:数组第一个元素对应的下标是0。


再来了解一个概念:偏移量。偏移量可以理解为,数组中元素的地址和数组首地址的差。因为数组的首地址就是数组第一个元素的地址,所以第一个元素的偏移量为0,即数组下标是从0开始。但赋值的时候,常数的个数不能超过数组长度(编译会出错),如果常数个数比数组长度少,少的部分系统会自动补零!

e.g. int array[3] = {1,11,111,1111}; //错误

int array[3]={1} ;

等价于

array[0]=1,array[1]=0,array[2]=0;


另一种初始化方式

Int array[] = {1,11,111};

省略了长度,编译器会根据元素个数来补充长度的大小。

注意:这个补零对应整型元素就是补0,对应浮点型补0.0,对应字符型补‘\0’(即ASCII的NULL)



一维数组的访问


1. 通过下标来访问数组元素

2. 通过指针来访问


因为数组的存储空间是连续的,因此只需知道首地址,元素类型和数组长度就可以访问每一个元素


我们通过一段代码来说明:

微信图片_20220420151712.jpg


在小编的编译器输出结果为:6684208  6684208  1 1 1 1  11 11 11 11  111 111 111 111 0 0 0 0

注意:既然p是一个指针变量,我们对它进行自增运算,

就有以下方式访问数组元素:微信图片_20220420151716.jpg


输出结果为 1  11  111

有关自增的知识我们将在下次推文详细的介绍。


指针数组


谈谈定义

当数组元素的类型为指针类型时,即这个数组是拿来放地址的,我们就把这个数组称为指针数组。因此这个数组是对一系列对象的地址的管理。


说明格式:类型 *标识符[长度]

还是看例子实在一点

微信图片_20220420151719.jpg

当然这样定义int*array[array_1,&a,&b]也是可以的,但没有什么实际意义。


下面我们来输出指针数组指向的数组的元素:

微信图片_20220420151723.jpg


指针数组与数组指针

我们已经知道指针数组是本质是一个数组,只不过其元素为指针类型;数组指针本质是一个指针,只不过其指针指向一个数组。

int (*p)[4];

表示一个整型指针,而这个指针只能指向一个有四个整型元素的数组。

int a[4]={0};//[]下标

p= &a;


今天先介绍到这里,有关数组更多的内容,我们下一课再聊

相关文章
|
8天前
|
搜索推荐 编译器 C语言
【C++核心】特殊的元素集合-数组与字符串详解
这篇文章详细讲解了C++中数组和字符串的基本概念、操作和应用,包括一维数组、二维数组的定义和使用,以及C风格字符串和C++字符串类的对比。
36 4
|
5月前
|
存储 C++
C++指针数组
C++指针数组
39 1
|
5月前
|
存储 C++
C++程序数组与指针:深入理解与实践
C++程序数组与指针:深入理解与实践
57 1
|
1月前
|
C++
C++(十一)对象数组
本文介绍了C++中对象数组的使用方法及其注意事项。通过示例展示了如何定义和初始化对象数组,并解释了栈对象数组与堆对象数组在初始化时的区别。重点强调了构造器设计时应考虑无参构造器的重要性,以及在需要进一步初始化的情况下采用二段式初始化策略的应用场景。
|
2月前
|
算法 C++
c++学习笔记04 数组
这篇文章是C++学习笔记4,主题是数组。
38 4
|
2月前
|
C++ 索引
C++数组、vector求最大值最小值及其下标
C++数组、vector求最大值最小值及其下标
60 0
|
3月前
|
C++ 索引 运维
开发与运维数组问题之在C++中数组名和指针是等价如何解决
开发与运维数组问题之在C++中数组名和指针是等价如何解决
22 6
|
3月前
|
存储 安全 C++
开发与运维数组问题之声明一个数组如何解决
开发与运维数组问题之声明一个数组如何解决
40 6
|
3月前
|
存储 C++ 容器
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
46 5
|
2月前
|
安全 编译器 C语言
C++入门-数组
C++入门-数组