新手学习C语言: 第5天 二维数组剩余部分

📅 2026/8/6 4:24:24
新手学习C语言: 第5天 二维数组剩余部分
闲言我相信肯定有人好奇。为什么我要在专业的开发者社区中写这些与基础知识有关的文章这个社区的主要用户肯定早就精通C语言了。写出来也没人看啊。但其实我写这些文章并不是为了分享自己的经历希望有人看到只是因为我从网上看了一种费曼学习法将自己学过的知识讲出来如果能讲清楚就说明学清楚了顺带的纪念我从新手开始学习计算机的过程。就我个人这几天的感受而言这个方法是切实有效的。看到这篇文章的读者也许你们早就学完了C语言和数据结构甚至是更深层次的知识但如果你们有需要学习新知识的需求可以试一试这个方法唯一比较麻烦的就是手打几千个字比较累。使用这种方法可以帮助我们很好的理清思路和逻辑同时也能发现自己在学习时的不足之处加以补充。正文昨天已经说完了二维数组的创建和初始化以及它的内存布局。今天要说的是我前两天所忽略的一个内容。数组的遍历这个点值得单独拿出来说一下我的前两篇文章也没有提及到。所谓数组的遍历就是在使用下标引用操作符的情况下访问数组中的每一个元素我个人的理解就如前几天所说的数组是一个集合也是在内存中所开辟的一片连续的储存空间那么对于空间中的多个元素我们如何用一个程序就能访问它的每一个元素呢没错用到的就是前两天所学习的循环以 for 循环为例对于一个一维数组int arr[10]{1,2,3,4,5,6,7,8,9,10}int afora0;a10;a){printf(%d“arr[a])}这个程序可以遍历输出数组中的元素,二维数组也是同理只需要用嵌套的循环外层循环遍历一行内层循环遍历列即可。数组的下标引用这个在前两天的文章中也有提及过不过当时说的不太清楚。数组中的每一个元素是拥有下标的假设一个数组有 n 个元素那它的下标便是从 0 到 n-1如果我们需要引用下标需要使用”【】“符号英文输入法的中括号不太明显所以我用中文输入的)这个操作符叫做下标引用操作符,在其中输入下标便可以对应到数组中的元素需要注意的一点是,如果你的数组大小是10个元素,那在下标使用时一定不要越界。所谓越界就是你创建了一个数组里面只有 10 个元素但是你在输入程序的时候访问到了下标10下标时所对应的元素应该是第 11 个元素但是数组之中没有这时候编译器便会无法识别开始输出一些胡乱的数字。Sizeof计算数组的大小这个知识点前两天也被我遗漏了使用 sizeof 计算数组的大小时计算出来的结果应该是数组中所储存的数据类型所占的字节长度乘以数组中的元素个数。比如像我们创建了一个能储存10个元素的数组其中的每个元素都是整形那么 sizeof 计算出来的大小便是 40一个整形占4个字节10个整形变占40个字节换句话说我们可以用数组的大小除以数组中某一个元素的大小以此来计算数组中存了多少个元素。这一点可以应用在数组的遍历上当我们在写 for 循环时可以将 a 某个数改为 a sizeof(数组) / sizeof(数组之中的某个元素)这样的话即使代码写得很长忘了数组中有多少个元素也不需要来回翻看防止越界。数组存储的地址之前我们说过数组就是在内存中创造的一片连续的储存空间存在其中的每一个元素都有一个地址。这里需要明晰一个概念元素的地址和它在数组中的下标不是同一个东西当我们需要打印出一个数组的地址时我们需要使用的占位符是 %p也就是如下形式printf”%p“arr[0]);被称为取地址操作符,在前面讲 scanf 函数的时候也有提及到。我们打印出的地址是以十六进制的形式显示出的需要特别说明的是在 C 语言中为了防止出现识别错误16 进制的显示分别是 1、2、3、4、5、6、7、8、9、A、B、C、D、E、F二分查找修正我昨天发布的文章中写了一组二分查找算法在今天的学习中我发现了一个问题如果数据过大的话在while循环中定义的变量mid不能直接赋值成1/2leftright因为在C语言中整形变量是有最大范围的如果数据过大超过这个范围的话便会发生整形坍缩使得数据变成一个负数所以我们需要等价变形将 1/2leftright变行为left1/2 right-left。两者在数学形式上是完全等价的是使用第二种写法就可以防止数据类型错乱。总结今天所学的新知识不多主要是对前面几天知识的查漏总结从明天开始我会开始学习函数的设计与指针的相关知识。在文章的最后给大家看一个好玩的程序。#include string.h#include windows.h#include stdio.hint main(){char arr1[ ] 原神启动;char arr2[ ] ####;size_t left 0;size_t right strlen(arr1) - 1;printf(%s\n, arr2);while (left right){Sleep(1000);system”cls“arr2[left] arr1[left];arr2[right] arr1[right];right--;left;}printf(%s\n, arr2);return 0;}