C语言从入门到精通第11天(数组的基本操作)

这篇具有很好参考价值的文章主要介绍了C语言从入门到精通第11天(数组的基本操作)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数组的概念

在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式集合在一起,这些按序排列的同类数据元素的集合称为数组。

在C语言中,数组属于构造数据类型,一个数组可以分解为多个数组数组元素,这些数组的元素可以是基本数据类型或构造数据类型。因此按数组元素的类型不同,数组可分为数值数组、字符数组、指针数组、结构数组等各种类别。

注:
1)数组中的元素的内存地址是连续的
2)同一个数组所有的成员都是相同的数据类型

一维数组

1) 语法

数据类型 数组名[常量表达式]

  • 数组名的命名规范必须满足“标识符的命名规范”
  • 方括号中的常量表达式就是数组的长度,也就是数组中存储元素的个数

例如:

int a[10]:说明数组是整型数组,有10个元素。
float b[10],c[20]:说明数组是实型数组,数组b,有10个元素;数组c,有20个元素。
char ch[20]:说明数组是字符数数组,包含20个元素。

2) 一维数组的初始化
定义一个数组时,需要进行初始化的操作,如果不进行初始化,则数组的内容为随机值。给数组的赋值除了用赋值语句对数组元素逐个赋值外,还可以采用初始化赋值和动态赋值(这里涉及到指针,后面会进行讲解)的方法。

  • 逐个赋值法代码如下:
int main(){
    // 定义一个数组,不进行初始化
    int a[5];
    a[0] = 1;
    a[1] = 2;
    a[3] = 3;
    a[4] = 4;
    return 0;
}
  • 初始化赋值法代码如下:
int main() {
    // 定义一个数组,同时初始化所有成员变量
    int a[6] = {1, 2, 3, 4, 5, 6};

    // 初始化前三个成员,后面的所有元素都设置为0
    int b[6] = {1, 2, 3};

    // 所有的成员设置为0
    int c[6] = {0};

    // []中不定义元素个数,定义时必须初始化
    int d[] = {1, 2, 3, 4, 5};

    // 如果数组定义元素个数,如果不进行初始化,内容为随机值
    int e[3];

    // 输出为 0 0
    // 并没有进行初始化
    printf("%d %d",e[1],e[2]);
    
    return 0;
}

3) 使用下标访问数组中的元素

  • 下标的值必须为整型常量/变量
  • 下标的值从0开始到【数组长度(定义的数组常量)-1】结束

注: 如果使用的下标值大于或者等于数组长度,程序仍然可以编译通过,但是运行的结果时未知的。

代码如下:

int main(){
    // 定义一个数组,不进行初始化
    int a[5] = {1,2,3,4,5};
    
    // 对数组中的元素
    for(int i = 0;i<5;i++){
		printf("%d",a[i]);
	}
	
    // 最后一个元素的下标为4
    // 此时我们取出超过数组长度的值
    printf("%d",a[5]); // 输出  32758
    return 0;
}


下面我们来看以下这张图就知道为什么我们会输出这个值:

C语言从入门到精通第11天(数组的基本操作)
由此图可以看出我们内存是由高地址到地址进行排列,并且在内存中每个位置都有可能存储着相应的值,这是未知的。所以当我们取的值超出了数组范围,此时会调用我们内存中的未知值,所以输出了32758。

二维数组

1)语法

数组类型 数组名[常量表达式1][常量表达式2]

  • 我们可以将二维数组当作一个有行有列的二维矩阵
  • 常量表达式1代表矩阵的行数
  • 常量表达式2代表矩阵的列数
  • 二维数组可以理解为由”常量表达式1“个一维数组组成的

例如:

int a[3][4]:可以表示为一个3行4列的二维数组,数组中的元素类型为int类型。

2)二维数组的初始化
二维数组的初始化跟一维数组的初始化相差不大,并且他的存储方式跟一维数组的存储方式是一样的,他的赋值方法也有逐个赋值和初始化赋值。

  • 逐个赋值代码如下:
int main(){
    // 定义一个二维数组,不进行初始化
    int a[2][2];
    a[0][0] = 1;
    a[0][1] = 2;
    a[1][0] = 3;
    a[1][1] = 4;
    
    return 0;
}

  • 初始化赋值代码如下:
int main(){
    // 定义一个二维数组,进行分段赋值
    int a[2][2] = {{1,2},{3,4}};

    // 连续赋值,这里根据数组定义的行列进行自动分配
    int b[2][2] = {1,2,3,4};

    // 部分赋值,只给部分
    // 行列不够,用0来凑
    int c[3][3] = {1,2,3};

    // 输出第3行3列的元素
    printf("Output position 3 hang 3 lie: %d",c[2][2]);
    
    // 0值初始化
    int d[2][2] = {0};
    
    // 不指定行数
    // 此时会根据数组的列数进行自动计算行
    int e[][2] = {1,2,3,4};
    
    // 需要注意的是不能不指定列数
    // 如果不指定列数,那么数组就不能确定到底是有多少列
    // 他的情况就有很多种
    // 不指定将无法进行初始化,程序会报错
    // int f[3][] = {1,3,3,43,4,};
    
    return 0;
}

3)使用下标进行数组元素的访问

  • 行列下标的值必须为整型常量/变量
  • 列下标的值从0开始到【数组长度(定义的数组常量)-1】结束
  • 行下标的值从0开始到【数组长度(定义的数组常量)-1】结束

注: 如果使用的下标值大于或者等于数组长度,程序仍然可以编译通过,但是运行的结果时未知的。

代码如下:

int main() {
    // 定义一个2行2列的二维数组
    int a[2][2] = {{1, 2},{3, 4}};

	// 访问第3行第1个元素
    printf("%d",a[2][0]);  // 98564384
    return 0;
}

他的取值方式跟一维数组的操作方式实际上是差不多的,也是超出了数组的长度,程序不会报错,但是返回的值是未知的。文章来源地址https://www.toymoban.com/news/detail-428495.html

到了这里,关于C语言从入门到精通第11天(数组的基本操作)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 链表入门:“单链表“的基本操作详解(C语言)

    目录 一,了解链表 二,基本操作的实现 1.  在代码开头的预处理和声明 2.  对链表进行初始化 一个错误案例的分析: 3.  对链表进行“增”操作 (1) “头插法”在链表头结点之后插入结点 (2) “尾插法”在链表的最后一个结点后插入结点 (3) 在指定位置插入结点 3,

    2024年02月04日
    浏览(39)
  • 【100天精通python】Day19:文件及目录操作_基本文件操作

    目录 专栏导读  1 文件的创建打开和关闭 2.1 使用内置函数open(),close()创建打开和关闭

    2024年02月14日
    浏览(54)
  • 【Java】7 再识数组|数组的基本操作

    欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 目前,已开了以下专栏,欢迎关注与指导 1️⃣Java基础知识系统学习(持续更文中…) 2️⃣UML的应知应会(已更完) 3️⃣MySQL的应知应会(持续更文中…) 4️⃣算法与数据结构体系(持续更文中…

    2023年04月08日
    浏览(33)
  • 【100天精通python】Day19:python文件及目录操作_基本文件操作

    目录 专栏导读  1 文件的创建打开和关闭 2.1 使用内置函数open(),close()创建打开和关闭

    2024年02月15日
    浏览(43)
  • JavaScript基本数组操作

    在JavaScript中,内置了很多函数让我们可以去对数组进行操作,本文我们就来学习这些函数吧 ● push可以让我们在数组后面再添加一个数据,例如 ● 我们也可以将新的新加的数据存入一个变量中,然后去得到它新的长度 除此在后面添加数据,我们也可以用这个函数来在数组前

    2024年02月10日
    浏览(35)
  • 【MATLAB】 01 基本操作与数组输入

    认识 MATLAB 操作界面 可以通过 Layout 选择需要显示的窗口及布局 使用 MATLAB 编程有两种方法 命令行 (命令窗口) 脚本 ( .m 文件) 运算符 + , - , * , / , ^ 计算的结果 以 ans 显示 优先级 同一优先级从左到右 优先级为 Parenthesis ( () ) Power ( ^ ) Multiplication and division ( * , / ) Addition and sub

    2024年02月06日
    浏览(42)
  • ElasticSearch 8.11 基本操作练习

    ES 8.0 默认把type给去掉了 新增/编辑 PUT /index/id  幂等操作 必须指定id 同一个id为修改 POST /index/id 非幂等操作 指定id时和put操作一样 不指定id 每次都会新增 id为系统随机分配 删除 DELETE /index  删除整个索引 DELETE /index/_doc/id  删除指定document  查询  GET /index/_search  不带条件查

    2024年02月04日
    浏览(42)
  • 【100天精通python】Day35:GUI界面编程_一文掌握Tkinter基本操作

    目录  专栏导读    1 GUI 编程概述 1.1 为什么需要GUI? 1.2 常见的GUI编程工具和库

    2024年02月12日
    浏览(54)
  • Linux 入门基本操作

    目录 一、Linux环境的安装 1.1常见的三种Linux环境安装 1.2云服务器的操作 1.3XShell 1.4 Linux下新建与删除用户 二、Linux的基本指令和操作 2.1初始Linux必备的三剑客 ①pwd指令 ②ls指令 ③cd指令  2.2理解文件  三、指令 3.1 ls指令 ①ls -lls -d ②ls -a  ③ls -Rl 3.2 cd pwd指令 ①pwd指令补充

    2023年04月22日
    浏览(49)
  • nodejs 入门基本操作

    在窗口执行对应的目录即可,我这里是: 如上最简单的http 服务起来了,在浏览器中 输入 http://localhost:9000/index.html 得到如下页面 通过匹配后缀,在public文件中返回对应的资源,代码结构如下 都是一些很简单的代码就不贴了,如果需要留下 邮箱 即可。 其他模块看看官网的文

    2024年02月05日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包