广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言数组详细介绍
  • 124
分享到

C语言数组详细介绍

2024-04-02 19:04:59 124人浏览 八月长安
摘要

目录什么是数组一维数组二维数组数组越界 数组名 结尾什么是数组 数组(Array)是一种用来存储同一种类型的集合,是一种有序的线性结构表。并且数组元素的地址是连续

什么是数组

数组(Array)是一种用来存储同一种类型的集合,是一种有序的线性结构表。并且数组元素的地址是连续的。

数组最大的优点就是支持随机访问,当想访问数组的某个数时,只需要找到数组的对应下标就可以直接找到该数组对应元素。但是数组也有相应的缺点,那就是数组的元素个数和数组空间大小在创建时就已经被固定死了,如果数组的空间没有使用完也会造成空间浪费,并且因为数组的地址是连续的,这本应该是一个优点的,但是这导致数组在进行删除或增加元素时需要O(n)才能完成。

数组的下标

数组下标是从0开始的,假设,访问arr[5]元素时,访问的是数组的第6个元素,访问arr[0]时,访问的是数组的第一个元素。

一维数组

一维数组创建

一维数组是常见的数组,创建方法是:数据类型 + 数组名 [ 元素个数 ];

int arr[10];

C99的标准之前,当数组在创建时,方括号内的数组元素个数只能是常量,使用的常量也必须是真正意义上的常量,比如用const修饰的变量有了常属性,但不是真正意义的常量,而由define定义的常量可以用来做数组元素个数。而C99之后数字方括号内的元素可以使用变量,而使用变量的做数组元素个数的数组,叫做变长数组。

一维数组初始化

int arr[10] = {1,2,3,4,5,6,7,8,9,10};//整形数组
int arr[] = {0}//不指定大小但必须初始化
char ch[10] = {'1','2','3'};//字符数组
char str[10] = "abcde";//字符串数组

一维数组的赋值

用循环变量访问数组下标,给数组进行赋值。%s对应的是输入一个字符串,需要提供一个字符数组来存储,数组名是一个地址,所以不用加&取地址。

int arr[10] = {0};
for(int i = 0;i < 10;i++)
{
    scanf("%d",&arr[i];
}
 
char str[10] = {0};
scanf("%s",str);//字符串赋值可以不取地址和循环

一维数组在内存的存储方式

一维数组的元素地址是连续的,也就是元素的地址一个紧挨着一个。地址在内存是以二进制进行存储的,但是如果以二进制来展示的话就会非常的长而且也未必好理解,所以就由十六进制来进行展示。(下图)观察下图可发现,地址的是由低到高随着下标增长而增长的,有规律的递增,且每个数组元素地址都相差了四个字节,相差的四个字节是一个int整形的空间大小。

二维数组

二维数组在我们的逻辑概念中可以是一个矩阵,但在内存中与一维数组一样是一个连续的地址空间。通常我们将二维数组的第一个方括号看做行,第二个方括号看做是列。

二维数组的创建和初始化

二维数组与一维数组只是多加了一个方括号。数据类型 + 数组名[元素个数][元素个数];

int arr[3][3] = {1,2,3,4};//4自动存到arr[1][0]的位置
int arr[3][3] = {{1,2,3},
                 {4,5,6},
                 {7,8,9}};//一个大括号代表一行,每个大括号以逗号隔开
int arr[][3] = {0};//二维数组可以不初始化行,但必须初始化列

二维数组的赋值

给二维数组赋值,与一维数组一样都需要循环来搞定,但是二维数组需要在一维数组的循环基础上再嵌套一层循环。

int arr[3][3] = {0};
for(int i = 0;i < 3;i++)
{
    for(int j = 0;j < 3;j++)
    {
        scanf("%d",&arr[i][j]);//i访问行,j访问列
    }
}

数组越界

数组的下标范围是有限的,因为数组的下标是由0开始的,所以数组能访问的的下标就是数组元素个数减一个(N-1),当访问了不属于数组元素地址范围的空间,就叫做数组越界。假设一个arr[10]的数组,当访问下标时大于等于10的时候,就会导致数组向后溢出,也叫下溢出,相对的,当数组向数组第一个元素的前面越界访问时,也就是下标小于0,就叫上溢出,越界访问是非常危险的一个操作,因为有的编译器没有检查数组是否越界的功能,所以,当程序员在写代码所以数组时,要非常注意数组是否存在越界问题。二维数组的行和列也同样

 数组名

数组名是指向数组首元素地址的指针,即下标为0的元素的地址的指针。上面说,由于数组的地址是连续的,所以当找到数组的首元素就可以找到数组的其他成员。如果用sizeof(数组名),这里的数组名代表的是整个数组,计算的是整个数组的大小。再除以sizeof(下标为0的地址),就可以得到数组的元素个数。

 数组的传参方式

当要将数组作为函数参数进行传参时,需要在函数的传参位置放一个数组名,形参部分就会接收到一个数组的首元素地址的指针,而接收这个指针就也需要同类型的指针。在形参部分,数组可以有两种形式表示,一种是以数组的形式,一种是以指针的形式,两种方式都可以对数组进行传参。

void bubble_sort(int arr[])
void bubble_sort(int* arr)

当数组在传参之后,函数部分是不能计算数组的元素个数的。因为形参接收的只是一个数组的首元素地址的指针,而不是整个数组,计算数组的时候也只是计算了数组的首元素地址的大小,然后再除以首元素地址的大小,所以理所当然的得到一个1。所以,当数组需要传参,并且还需要用到数组的元素个数时,要先计算好数组元素个数,将计算好的元素个数和数组一起传参。

 结尾

数组其实不只有一维和二维数组,还有三维数组甚至更高维,但是在情况下很少会用到,而且对于初学者用到二维数组就已经足以。

到此这篇关于C语言数组详细介绍的文章就介绍到这了,更多相关C语言数组内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言数组详细介绍

本文链接: https://www.lsjlt.com/news/161591.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言数组详细介绍
    目录什么是数组一维数组二维数组数组越界 数组名 结尾什么是数组 数组(Array)是一种用来存储同一种类型的集合,是一种有序的线性结构表。并且数组元素的地址是连续...
    99+
    2022-11-12
  • C语言初阶之数组详细介绍
    目录插入排序讲解二维数组二维数组的初始化二维数组的访问n维数组字符数组字符数组和字符串字符数组的输入输出字符串函数的简单使用综合使用字符串函数总结插入排序讲解 #include&...
    99+
    2022-11-12
  • C语言指针详细介绍
    本篇内容主要讲解“C语言指针详细介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言指针详细介绍”吧!指针对于C来说太重要。然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机...
    99+
    2023-06-15
  • C语言指针的详细介绍
    这篇文章主要介绍“C语言指针的详细介绍”,在日常操作中,相信很多人在C语言指针的详细介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言指针的详细介绍”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!目录...
    99+
    2023-06-20
  • c语言中数组名a和&a的详细介绍
    这篇文章主要讲解了“c语言中数组名a和&a的详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c语言中数组名a和&a的详细介绍”吧!先说说a和&a的区别(有三点,...
    99+
    2023-06-17
  • C语言之循环语句详细介绍
    目录前言while语句do...while语句for语句结语前言 C语言中的循环结构是程序中的一个基本结构。 循环结构可以使我们写很少的语句,让计算机反复执行某一过程。 C语言提供了...
    99+
    2022-11-12
  • 详细介绍Go语言之数组与切片
    目录一、数组1、数组的定义2、数组赋值3、定义并初始化4、数组的大小是类型的一部分5、数组是值类型6、数组长度 len() 数组长度在定义阶段已经固定7、数组循环8、多维数组9、数组...
    99+
    2022-11-12
  • C#控件数组的详细介绍
    这篇文章主要介绍“C#控件数组的详细介绍”,在日常操作中,相信很多人在C#控件数组的详细介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#控件数组的详细介绍”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-17
  • C语言中volatile关键字的详细介绍
    这篇文章主要讲解了“C语言中volatile关键字的详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中volatile关键字的详细介绍”吧!1. 什么是volatile关键字?v...
    99+
    2023-06-20
  • Go语言数据类型详细介绍
    目录一、Go 语言两大数据类型二、基础类型三、复合类型指针四、数组(array)五、切片(slice)六、字典/映射(map)七、通道(channel)八、结构体(struct)九、...
    99+
    2022-11-13
  • Python编程语言详细介绍
    目录一、语法1、缩进2、变量3、表达式4、类型5、方法二、 库1、Python的应用3、值得学习Python吗? 前言: Python是世界上最流行的解释型编程语言之一。Python...
    99+
    2022-11-12
  • Go语言指针的详细介绍
    本篇内容介绍了“Go语言指针的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Go语言为程序员提供了...
    99+
    2022-10-18
  • C语言中数组的介绍及使用
    这篇文章主要讲解了“C语言中数组的介绍及使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中数组的介绍及使用”吧!目录数组一维数组初始化使用总结:内存存储二维数组创建初始化数组越界问题...
    99+
    2023-06-20
  • PHP Array 数组详细介绍
    目录前言语法定义数组 array()用方括号的语法新建/修改数组解包实用函数转换为数组前言 PHP 中的 array 实际上是一个有序映射。映射是一种把 values 关联到 key...
    99+
    2022-11-13
  • C++移动语义详细介绍使用
    目录1.移动构造函数2.右值引用3.std::move()将左值强制转换为右值引用4.拷贝语义和移动语义1.移动构造函数 移动语义就是使用移动构造函数来构造对象。 我们知道在类中如果...
    99+
    2023-01-28
    C++移动语义 C++移动语义用法
  • C语言数组超详细讲解上
    目录前言1、一维数组的创建和初始化1.1 一维数组的创建1.2 一维数组的初始化1.3 一维数组的使用1.4 一维数组在内存中的存储2、二维数组的创建和初始化2.1 二维数组的创建2...
    99+
    2022-11-13
  • C语言数组全面详细讲解
    目录1.基础知识2.数组的分类2.1按元素类型分类2.2按维数分类3.数组定义和初始化3.1 一维数组3.2 二维数组4.数组元素的引用方法5.字符数组的定义1.基础知识 C语言中使...
    99+
    2022-11-13
  • C++继承详细介绍
    在我们进行开发的时候,我们经常会遇到抽象出来的类之间具有继承关系。 举个简单的例子,比如我们在设计某游戏,当中需要定义Human也就是人这个类。每个人有名字,以及一定的血量,能够工作...
    99+
    2022-11-12
  • C语言中各种操作符的详细介绍(纯干货!)
    目录算术操作符移位操作符位操作符赋值操作符 单目操作符(类型)   强制类型转换       ...
    99+
    2022-11-12
  • C语言常量介绍
    目录什么是常量常量都有哪些这四种常量的特点、注意事项等等1.字面常量:2.const修饰的常变量3.#define定义的标识符常量4.枚举常量总结什么是常量 从字面上简单解释就是不变...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作