当前位置:首页 » 《资源分享》 » 正文

重生之我在异世界学编程之C语言:一维数组篇

18 人参与  2024年12月18日 18:01  分类 : 《资源分享》  评论

点击全文阅读


大家好,这里是小编的博客频道
小编的博客:就爱学编程

很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!!

本文目录

引言正文一 一维数组的概念二 一维数组的创建三 一维数组的初始化:(1)一维数组的完全初始化(2)一维数组的部分初始化 四 一维数组类型:五 一维数组的使用数组的下标(索引)1.遍历数组2.随机访问元素3.修改指定元素4.查找某个元素 六 数组在内存中的存储:七 变长数组 介绍到这,本文也已到了尾声,下一篇小编将和大家二维数组的奥秘。记得来看!!!如果喜欢本篇文章,记得三连,要互三的宝子记得评论,小编怕遗漏!!!谢谢大家!!!

引言

在C语言中,数组是一种非常重要的数据结构,它允许我们存储固定大小的同类型元素集合。通过使用数组,我们可以方便地处理大量数据,提高程序的效率和可读性。数组的类型分为一位数组和二维数组,还有多维数组,而今天小编将要给大家介绍的是一维数组的相关知识。一起来看看吧!!!

在这里插入图片描述


那接下来就让我们开始遨游在知识的海洋!

正文


因为今天我们的任务就是学会一维数组,那自然首先我们要学习的就是它的概念——一维数组的概念

一 一维数组的概念

基本概念:一维数组(One-Dimensional Array)是计算机编程中最基本的数据结构之一,用于存储一系列相同类型的数据元素。这些元素在内存中按顺序连续存放,每个元素可以通过一个唯一的索引(Index)来访问。在C语言中这个索引是从0开始的整数。

相信大家在刚看到这些文字的时候,肯定有很多诸如此类的疑惑:什么是数据结构?什么叫元素可以通过唯一索引访问?什么是数组的索引?不要急,除了数据结构,小编在后文会为大家一一解惑。现在大家只要大概懂一维数组是用来存储一系列相同类型的数据元素的概念就行。

至于为什么说除了数据结构,这是因为数据结构并不是我们C语言初学者应该先了解的内容,我们现在应该学好C语言的基本语法,在后面小编会带着大家一起学习这一内容。


那接下来就跟着小编来学习一维数组的创建

二 一维数组的创建

首先我们来了解一维数组的格式

格式为:元素类型 数组名[元素个数]

就像这样:

         int  arr[10];         char   arr[10];         float  arr[10];         bool   arr[10];

这样我们就创建了四个元素个数均为10个的整形数组,字符数组,浮点型数组,布尔型数组。

事实上,数组的类型还有很多,因为目前我们并没有学完C语言所有的数据类型,但也不用怕,等到了后面,再来学习。


学完创建,我们再来看看如何对一维数组进行初始化

三 一维数组的初始化:

事实上,数组的初始化有着部分初始化完全初始化之分,我们依次来学习。


(1)一维数组的完全初始化

顾名思义,把所有的数组元素赋值为我们想要的数值

例如:

    int arr[10]={1,2,3,4,5,6,7,8,9,10};

这样我们就对数组进行了完全初始化,每个数组元素就被我们从左往右按照数组下标从0到9进行了赋值,而这个下标就是前文——数组概念内提到的索引。至于为什么下标从零开始,这是C语言的规定。

我们还没有学习遍历数组,但这可以通过VS的调试窗口(有兴趣也可向小编了解)看到:

在这里插入图片描述


接着再来看看一维数组的部分初始化

(2)一维数组的部分初始化

顾名思义,把部分(前面的)的数组元素赋值为我们想要的数值

例如:

int arr[10] = {1, 2};

这样我们就让数组的第一个元素和第二个元素赋值成了1,2,那剩下没进行赋初值的数组元素的值是多少呢?

事实上,编译器会自动把他们赋值为0

同理,这也可以通过VS的调试窗口(有兴趣也可向小编了解)看到:

在这里插入图片描述

有图有真相,小编不是在乱说哦!


接下来,我们再来看看一维数组的类型是如何确定的。大家可以先思考一个问题:数组的类型一样,是不是说明是同一个数组?

四 一维数组类型:

类型格式为:元素类型 [元素个数]

例如:

int[10];

事实上,数组去掉数组名剩下来的就是数组的类型这也适用于更高维的数组

由此可见类型一样,数组未必是同一个数组

学到这,我们对一维数组有了基本的认识,接下来就要学一学该如何使用一维数组。

五 一维数组的使用


数组的使用毫无疑问要从数组的下标开始讲起

数组的下标(索引)

我们在这必须承认的规则:数组的下标是从0开始的

这一点从上面的调试窗口截图也可以看出。

也就是:

int[10]={1,2,3,4,5,6,7,8,9,10};         0,1,2,3,4,5,6,7,8,9 arr[0]==1,arr[9]==10;

那知道了这个,我们可以用在哪些地方呢?

接下来,就看看数组下标的运用场景:

1.遍历数组

使用循环(for循环或while循环)和数组下标来依次访问 数组中的每个元素。这是处理数组数据最常用的操作之一。

例如:

#include<stdio.h>int main(){int arr[10] = {1, 2, 3, 4, 5, 6, 7 ,8, 9, 10};for(int i=0;i<10;i++){   printf("%d ",arr[i]);}printf("\n");}

运行结果为:

在这里插入图片描述

2.随机访问元素

通过指定下标可以快速访问数组中的特定元素,而不需要遍历整个数组,时间复杂度为O(1)。

如果我们想访问数组第三个元素,则:

#include<stdio.h>int main() {int arr[10] = { 1, 2,3, 4, 5, 6, 7, 8 ,9, 10};printf("%d ", arr[2]);return 0;}

运行结果为:
在这里插入图片描述

3.修改指定元素

我们可以使用下标来更新数组中某个元素的值。这在需要修改数据 而不改变其他元素是非常有用的。

如果我们想修改数组第三个元素的值为1时,可以这样:

#include<stdio.h>int main() {int arr[10] = { 1, 2,3, 4, 5, 6, 7, 8 ,9, 10};arr[2] = 1;printf("%d ", arr[2]);return 0;}

运行结果为:

在这里插入图片描述

4.查找某个元素

在某些情况下,可以通过比较值并使用下标来进行简单的查找操作。

如果你想查找是否存在数值为3的数组元素,可以这样:

#include<stdio.h>int main() {int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8 ,9, 10};int i = 0;for (i; i < 10; i++) {if (arr[i] == 3){printf("找到了,下标为:%d\n", i);return 0;}}printf("你要查找的值不存在\n");return 0;} 

运行结果:

在这里插入图片描述

学到这,我们差不多会了简单的一维数组的使用了。


接下来,我们再看看一维数组是如何存储在内存中的。

六 数组在内存中的存储:

元素在内存中的存储是连续的,也就是紧挨着的。

如何证明?

这里就要用到一个取地址操作符’&',一个地址占位符’p

如下:

#include<stdio.h>int main() {int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8 ,9, 10};int i = 0;int flag = 0;for (i; i < 10; i++) {printf("%p\n", &arr[i]);}return 0;}

运行结果:

在这里插入图片描述
注:

在64位机器(现在的大部分计算机)中地址的大小是8个字节;'%p’占位符打印的是十六进制表示下的地址;两个十六进制位数字就占用一个字节

所以我们不难发现:整形数组的相邻数组元素首字节地址大小相差4个字节,也就是一个整型数据的大小。

所以我们可以得出:

元素在内存中的存储是连续的,也就是紧挨着的。

七 变长数组

C语言在C99中引入了变长数组的概念,就是元素个数可以用变量表示的数组.。但有一些编译器不支持变长数组的语法:VS就是其中很经典的编译器。

例如:

int arr[n];scanf("%d",&n);

变长数组的好处就是:

1.数组的长度可以由自己输入确定;2.可以减少内存的浪费。

但也要注意:变长数组不可以初始化
如果想要初始化一个长度可以由自己改变的数组,则就要使用符号常量

例如:

#define  PI   10int  arr[PI]={0};

介绍到这,本文也已到了尾声,下一篇小编将和大家二维数组的奥秘。记得来看!!!如果喜欢本篇文章,记得三连,要互三的宝子记得评论,小编怕遗漏!!!谢谢大家!!!


点击全文阅读


本文链接:http://zhangshiyu.com/post/203196.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1