首页 > 其他分享 >C语言数组探秘:数据操控的艺术【上】

C语言数组探秘:数据操控的艺术【上】

时间:2024-09-25 13:50:06浏览次数:9  
标签:初始化 操控 下标 int 元素 C语言 数组 探秘 我们

在C语言中数组是非常重要的,应用也是非常广泛的,它可以帮助我们更好的写代码,来解决问题。欧克,开始今天的数组的章节。


一.数组的概念

数组是一组相同类型元素的集合;从这个概念中我们就可以发现2个有价值的信息:
数组中存放的是1个或者多个数据,但是数组元素个数不能为0。
数组中存放的多个数据,类型是相同的。
数组分为一维数组和多维数组,多维数组一般比较多见的是二维数组。

那我们怎么来创建一个数组呢?接下来我们来看一维数组的创建和初始化


二.一维数组的创建和初始化

1.数组创建

一维数组创建的基本语法:

1  type. arr_name[常量值];

存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的大小和数组的元素类型。
始化
type 指定的是数组中存放数据的类型,可以是:char、short、int、float等,也可以自定义的类型。
arr_name 指的是数组名的名字,这个名字根据实际情况,起的有意义就行。
[]中的常量值是用来指定数组的大小的,这个数组的大小是根据实际的需求指定就行。

比如
在这里插入图片描述

当我们想要给数组放一些东西该怎么办呢?接下来我们讲数组的初始化

2.数组的初始化

就像我们创建变量的时候想要先给它一个值,等于零,这就是变量的初始化。有时候,数组在创建的时候,我们需要给定一些初始值,这种就称为初始化。那数组如何初始化呢?数组的初始化一般使用大括号,将数据放在大括号中。

比如

在这里插入图片描述

那如果数组的大小特别大呢,难道我们还要全部一个一个输入值吗?其实上面是完全初始化,如果只给数组前三个值,是不完全初始化,剩余的默认初始化为0。

在这里插入图片描述

我们初始化的值可以给的少,但不能给的多。初始化的值不能比数组的元素更多

字符数组也是如此:

在这里插入图片描述

字符数组中放斜杠零是因为它的ASCII值为0。

数组如果初始化了,就可以省略掉数组的大小,那么编译器会根据初始化的内容来自动推算数组的元素的个数。

在这里插入图片描述

3.数组的类型

数组也是有类型的,数组算是一种自定义类型,去掉数组名留下的就是数组的类型。如下:
1  int  arr1[ 10 ];
2  int  arr2[ 12 ];
3  char ch[ 5 ];

arr1数组的类型是 int [ 10 ],arr2数组的类型是 int [ 12 ],ch 数组的类型是 char [ 5 ]。

例子:

在这里插入图片描述

从上面我们可以看到该数组的类型为int [ 10 ] ,那我们认识数组的类型有什么用呢?我们计算数组大小的时候可以用数组名和类型来进行计算。如:

在这里插入图片描述

同样我们从上面的例子可以看出另一个事情:这个可以证明这两个类型是不一样的,因为数组的大小不一样,所以数组的类型与数组的大小和数组元素的类型是有关的,只要这其中两个有一个不一样,数组的类型就不一样。

那我们怎么样把数组改成一些我们想要的值或者打印出来看看呢?该怎么操作呢?,接下来我们来讲一维数组的使用


三.一维数组的使用

学习了一维数组的基本语法,一维数组可以存放数据,存放数据的目的是对数据进行操作,那我们如何使用一维数组呢?

我们先学数组下标

1.数组下标

C语言规定数组是有下标的,下标是从0开始的,假设数组有n个元素,最后一个元素的下标是n-1,下标就相当于数组元素的编号,如下:

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

我们画图来表示
在这里插入图片描述

在C语言中数组的访问提供了一个操作符[ ],这个操作符叫:下标引用操作符。有了下标访问操作符,我们就可以轻松的访问到数组的元素了,比如我们访问下标为7的元素,我们就可以使用arr[7],想要访问下标是3的元素,就可以使用arr[3]。

当我们知道了下标引用操作符,它可以直接找到数组里面对应的值,正如我们通过房间编号找到房间里面的人,我们通过下标找到数组里面的元素。

在这里插入图片描述

有了下标引用操作符,你可以拿数组元素的值打印出来,也可以放一个值,arr[6]就相当于了那一块数组空间。当我们想要访问数组元素的时候,是通过下标来进行访问的

那我们能不能将数组元素全部打印出来呢?往下看。

2.数组元素的打印

接下来,如果想要访问整个数组的内容,那该怎么办呢?我们知道每个元素都有下标,只要我们产生数组所有元素的下标就可以了,那我们使用for循环产生0到9的下标,接下来使用下标访问就行了。

在这里插入图片描述

那我们可不可以改这数组10个元素的值呢?接下来我们讲数组元素的输入。

明白了数组的访问,当然我们也根据需求,自己给数组输入想要的数据,如下:

在这里插入图片描述

注意:printf(“%d”,arr)无法打印数组的内容,arr是数组名,数组名是数组的起始地址。


四.一维数组在内存中的存储

内存会被划分为一个个的内存单元,一个单元的大小是1个字节,每个内存单元都有一个编号,这个编号就是地址

我们通常打印地址,所用的占位符为%p来打印。例子:

在这里插入图片描述

我们看打印出来的地址非常的长,原因是我们用的是x64的环境。x64表示64位的环境,地址较长,x86表示32位的环境,地址较短。长地址我们观察不方便,所以x86环境来观察,它们两个是一样的观察,只是展示形式不一样。

在这里插入图片描述

地址打印的出来的时候,是按照16进制的形式显示的。我们选了一组比较好观察的地址。

先铺垫一些小知识:

10进制的数字:0到9组成
16进制的数字:0到9和10 11 12 13 14 15,而后面六位它们分别用字母来表示为:  a.  b.   c.  d.  e.   f。

从上面我们可以看到每相邻的元素的地址都相差4,因为每个元素类型为整形,一个整型类型所占空间就是4个字节。看图:

在这里插入图片描述

我们来看,如果内存连续的话,将给每一个字节连续编号,一个元素是占四个字节,第一个元素起始地址为0,第二元素起始地址是4,两个元素起始地址相差为4,再根据我们打印结果来看,从中我们可以得到这些元素在内存中是紧挨着放的,连续放的

小知识:得到一维数组在内存中是连续存放的,它是非常重要,只要我们知道起始地址,就可以顺藤摸瓜得到后面所有地址。
随着下标的增长,地址也是由小变大的。

五.sizeof计算数组元素个数

在遍历数组的时候,我们经常想知道数组的元素个数,那C语言中有办法使用程序计算数组元素个数吗?答案是有的,可以使用sizeof。sizeof 在C语言中是一个关键字,是可以计算类型或者变量大小的,其实sizeof 也可以计算数组的大小

比如:

在这里插入图片描述
这是计算的是数组的总大小,单位是字节。

在这里插入图片描述

公式:数组的总长度/一个元素的长度=数组的元素的个数。

它的一般使用:

在这里插入图片描述

这样当我们写代码需要多处用到数组元素个数,改数组元素个数的时候,只需要改一个地方,就不用改其他地方的值了,需要数组元素个数的地方就不用固定写死了,方便了许多


六.二维数组的创建

前面学习的数组被称为一维数组,数组的元素都是内置类型的,如果我们把一维数组做为数组的元素,这时候就是二维数组,二维数组作为数组元素的数组被称为三维数组,二维数组以上的数组统称为多维数组

看图

在这里插入图片描述
那我们如何定义二维数组呢?语法如下:

1 type arr_name[常量值1][常量值2];
3 例如:
4 int arr[3][5];
5 double data[2][8];

解释:上述代码中出现的信息
3表示数组有3行
5表示每一行有5个元素
int 表示数组的每个元素是整型类型
arr是数组名,可以根据自己的需要指定名字
data数组意思基本一致。

七.二维数组的初始化

在创建变量或者数组的时候,给定一些初始值,被称为初始化。那二维数组如何初始化呢?像一维数组一样,也是使用大括号初始化的

不完全初始化
1 int arr1[ 3 ][ 5 ] = {1,2};
2 int arr2[ 3 ][ 5 ] = {0};

在这里插入图片描述

完全初始化

在这里插入图片描述

按照行初始化

在这里插入图片描述

初始化时可以省略行,但是不能省略列

1 int arr5[][5] = (1,2,3};
2 int arr6[][5]=(1,2,3,4,5,6,7);
3 int arr7[][5] = {{1,2}, (3.4). {5.6}}:

在这里插入图片描述
在这里插入图片描述

欧克,数组的上一篇结束,还有下一篇,敬请期待,最后的最后,非常感谢大家的支持!!!

标签:初始化,操控,下标,int,元素,C语言,数组,探秘,我们
From: https://blog.csdn.net/2402_84021550/article/details/142302980

相关文章

  • 理解C语言之深入理解指针(三)
    目录1.字符指针变量2.数组指针变量2.1数组指针变量是什么?2.2数组指针变量怎么初始化3.⼆维数组传参的本质4.函数指针变量4.1函数指针变量的创建4.2函数指针变量的使⽤4.3两段有趣的代码4.3.1typedef关键字5.函数指针数组6.转移表1.字符指针变......
  • 嵌入式C语言自我修养:C语言的面向对象编程思想
    ⭐关联知识点:C和C++的区别代码复用与分层思想什么是代码复用呢?(1)函数级代码复用:定义一个函数实现某个功能,所有的程序都可以调用这个函数,不用自己再单独实现一遍,函数级的代码复用。(2)将一些通用的函数打包封装成库,并引出API供程序调用,实现了库级的代码复用;(3)将一些类似的应用程序抽象成......
  • 嵌入式C语言自我修养:C语言的模块化的编程思想
    不同模块如何集成到系统中去?模块的编译和链接一个C语言项目划分成不同的模块,通常由多个文件来实现。在项目编译过程中,编译器是以C源文件为单位进行编译的,每一个C源文件都会被编译器翻译成对应的一个目标文件。链接器对每一个目标文件进行解析,将文件中的代码段、数据段分别组装,生成......
  • 【C语言中的函数指针】
    C语言中的函数指针首先搞一个循环输出字符串数组的功能代码如下:/*filename:funcp.c*/#include<stdio.h>/*compile:gccfuncp.c-ofuncprun:./funcp*//**/intmain(intargc,char*argv[]){char*buff[5]={"Jim","Pike"......
  • C语言中的转向语句
    在C语言中,转向语句用于改变程序的执行流。主要的转向语句包括goto、break和continue。它们各自有不同的用途和特性,能够在特定情况下简化或优化代码。本文将深入探讨这些语句,并通过复杂示例展示其应用。1.goto语句goto语句允许程序无条件跳转到程序中的某个标签。标......
  • C语言中的字符输入输出
    引言在C语言中,字符输入和输出是基本的操作。本篇文章将深入探讨两个重要的函数:putchar和getchar,并通过示例说明如何使用它们。1.字符输出:putchar函数putchar函数用于将一个字符输出到标准输出设备(通常是屏幕)。其函数原型为:intputchar(intchar);参数:接受一个字符作......
  • 移动数组中数字的方法(c语言)
    1.移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。例如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。2.我们确定数组,然后输入交换的几次,意思就是先前移......
  • 实验1 C语言输入输出和简单程序编写
    任务一#include<stdio.h>intmain(){printf("O\n");printf("<H>\n");printf("II\n");printf("O\n");printf("<H>\n");printf("II\n");return0;} #inclu......
  • 【C语言】使用 OpenSSL 进行 AES CBC 加密与解密
    使用OpenSSL进行AESCBC加密与解密在这篇文章中,我们将使用OpenSSL库实现AESCBC模式的加密和解密功能。AES(高级加密标准)是一种对称加密算法,广泛应用于数据保护。本示例展示了如何使用PKCS#7填充标准来处理明文的长度,以及如何确保在加密和解密过程中正确管理密钥......
  • E33.【C语言】数据在内存中的存储练习集(未完)
    1.求下列代码的打印结果#include<stdio.h>intmain(){ chara=-1; signedcharb=-1; unsignedcharc=-1; printf("a=%d,b=%d,c=%d",a,b,c); return0;}答案速查分析之前讲过,char在VS中默认为signedchar,则a和b的打印结果应该是一样的存储范围:si......