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

打印 上一主题 下一主题

主题 1009|帖子 1009|积分 3027

各人好,这里是小编的博客频道
小编的博客:就爱学编程
    很高兴在CSDN这个各人庭与各人相识,希望能在这里与各人共同进步,共同劳绩更好的自己!!!
  
  
引言

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


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


由于今天我们的使命就是学会一维数组,那天然首先我们要学习的就是它的概念——一维数组的概念
一 一维数组的概念

   根本概念:一维数组(One-Dimensional Array)是盘算机编程中最根本的数据布局之一,用于存储一系列相同范例的数据元素。这些元素在内存中按顺序连续存放,每个元素可以通过一个唯一的索引(Index)来访问。在C语言中这个索引是从0开始的整数。
  信赖各人在刚看到这些笔墨的时候,肯定有许多诸云云类的迷惑:什么是数据布局?什么叫元素可以通过唯一索引访问?什么是数组的索引?不要急,除了数据布局,小编在后文会为各人逐一解惑。现在各人只要大概懂一维数组是用来存储一系列相同范例的数据元素的概念就行。
至于为什么说除了数据布局,这是由于数据布局并不是我们C语言初学者应该先了解的内容,我们现在应该学好C语言的根本语法,在反面小编会带着各人一起学习这一内容。

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

首先我们来了解一维数组的格式
   格式为:元素范例 数组名[元素个数]
  就像如许:
  1.          int  arr[10];
  2.          char   arr[10];
  3.          float  arr[10];
  4.          bool   arr[10];
复制代码
如许我们就创建了四个元素个数均为10个的整形数组,字符数组,浮点型数组,布尔型数组。
事实上,数组的范例另有许多,由于目前我们并没有学完C语言全部的数据范例,但也不消怕,等到了反面,再来学习。

学完创建,我们再来看看怎样对一维数组举行初始化
三 一维数组的初始化:

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

   顾名思义,把全部的数组元素赋值为我们想要的数值
  比方:
  1.     int arr[10]={1,2,3,4,5,6,7,8,9,10};
复制代码
如许我们就对数组举行了完全初始化,每个数组元素就被我们从左往右按照数组下标从0到9举行了赋值,而这个下标就是前文——数组概念内提到的索引。至于为什么下标从零开始,这是C语言的规定。
我们还没有学习遍历数组,但这可以通过VS的调试窗口(有兴趣也可向小编了解)看到:


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

   顾名思义,把部分(前面的)的数组元素赋值为我们想要的数值
  比方:
  1. int arr[10] = {1, 2};
复制代码
如许我们就让数组的第一个元素和第二个元素赋值成了1,2,那剩下没举行赋初值的数组元素的值是多少呢?
事实上,编译器会主动把他们赋值为0。
同理,这也可以通过VS的调试窗口(有兴趣也可向小编了解)看到:

有图有原形,小编不是在乱说哦!

接下来,我们再来看看一维数组的范例是怎样确定的。各人可以先思考一个题目:数组的范例一样,是不是阐明是同一个数组?
四 一维数组范例:

   范例格式为:元素范例 [元素个数]
  比方:
  1. int[10];
复制代码
  事实上,数组去掉数组名剩下来的就是数组的范例这也适用于更高维的数组
  

  • 由此可见范例一样,数组未必是同一个数组

学到这,我们对一维数组有了根本的认识,接下来就要学一学该怎样使用一维数组。
五 一维数组的使用


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



  • 我们在这必须认可的规则:数组的下标是从0开始的
这一点从上面的调试窗口截图也可以看出。
也就是:
  1. int[10]={1,2,3,4,5,6,7,8,9,10};
  2.          0,1,2,3,4,5,6,7,8,9
  3. arr[0]==1,arr[9]==10;
复制代码
那知道了这个,我们可以用在哪些地方呢?
接下来,就看看数组下标的运用场景:
1.遍历数组

   使用循环(for循环或while循环)和数组下标来依次访问 数组中的每个元素。这是处理数组数据最常用的操作之一。
  比方:
  1. #include<stdio.h>
  2. int main(){
  3. int arr[10] = {1, 2, 3, 4, 5, 6, 7 ,8, 9, 10};
  4. for(int i=0;i<10;i++)
  5. {
  6.    printf("%d ",arr[i]);
  7. }
  8. printf("\n");
  9. }
复制代码
运行结果为:

2.随机访问元素

   通过指定下标可以快速访问数组中的特定元素,而不需要遍历整个数组,时间复杂度为O(1)。
  如果我们想访问数组第三个元素,则:
  1. #include<stdio.h>
  2. int main() {
  3.         int arr[10] = { 1, 2,3, 4, 5, 6, 7, 8 ,9, 10};
  4.                 printf("%d ", arr[2]);
  5.         return 0;
  6. }
复制代码
运行结果为:

3.修改指定元素

   我们可以使用下标来更新数组中某个元素的值。这在需要修改数据 而不改变其他元素是非常有用的。
  如果我们想修改数组第三个元素的值为1时,可以如许:
  1. #include<stdio.h>
  2. int main() {
  3.         int arr[10] = { 1, 2,3, 4, 5, 6, 7, 8 ,9, 10};
  4.         arr[2] = 1;
  5.                 printf("%d ", arr[2]);
  6.         return 0;
  7. }
复制代码
运行结果为:

4.查找某个元素

   在某些环境下,可以通过比较值并使用下标来举行简单的查找操作。
  如果你想查找是否存在数值为3的数组元素,可以如许:
  1. #include<stdio.h>
  2. int main() {
  3.         int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8 ,9, 10};
  4.         int i = 0;
  5.         for (i; i < 10; i++) {
  6.                 if (arr[i] == 3)
  7.                 {
  8.                         printf("找到了,下标为:%d\n", i);
  9.                         return 0;
  10.                 }
  11.         }
  12.         printf("你要查找的值不存在\n");
  13.         return 0;
  14. }
复制代码
运行结果:

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

接下来,我们再看看一维数组是怎样存储在内存中的。
六 数组在内存中的存储:

   元素在内存中的存储是连续的,也就是紧挨着的。
  怎样证明?
这里就要用到一个取地址操作符’&',一个地址占位符’p
如下:
  1. #include<stdio.h>
  2. int main() {
  3.         int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8 ,9, 10};
  4.         int i = 0;
  5.         int flag = 0;
  6.         for (i; i < 10; i++) {
  7.                 printf("%p\n", &arr[i]);
  8.         }
  9.         return 0;
  10. }
复制代码
运行结果:

注:


  • 在64位呆板(现在的大部分盘算机)中地址的大小是8个字节;
  • '%p’占位符打印的是十六进制表示下的地址;
  • 两个十六进制位数字就占用一个字节
所以我们不难发现:整形数组的相邻数组元素首字节地址大小相差4个字节,也就是一个整型数据的大小。
所以我们可以得出:


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

七 变长数组

   C语言在C99中引入了变长数组的概念,就是元素个数可以用变量表示的数组.。但有一些编译器不支持变长数组的语法:VS就是其中很经典的编译器。
  比方:
  1. int arr[n];
  2. scanf("%d",&n);
复制代码
变长数组的利益就是:


  • 1.数组的长度可以由自己输入确定;
  • 2.可以镌汰内存的浪费。
但也要注意:变长数组不可以初始化
如果想要初始化一个长度可以由自己改变的数组,则就要使用符号常量
比方:
  1. #define  PI   10
  2. int  arr[PI]={0};
复制代码

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

郭卫东

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表