认识数组(C语言)

发布时间:2026/10/2 14:02:36

认识数组(C语言) //定义数组 //一种自定义类型可以存储大量数据便于一次调用多个变量 //形式 //type arr_name[]; //由type数组元素类型arr_name(数组名以及[]规定数组大小三部分组成 //数组类型 //对于一个变量来说去掉其变量名就是它的类型 //比如对于char name[10]而言“char [10]就是它的类型 //数组初始化 //在了解数组初始化之前我们得了解数组中的元素是怎么调用的 //数组中的每个元素都有”下标“与之对应这就像数组元素的身份证一样 //举例int arr[10]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 其下标分布如下0 1 2 3 4 5 6 7 8 9 //所以如果你想调用元素”6“ //你就得输入arr[5]来使用它当然也有其他调用它的方法 //注意当字符串填入字符数组时会带着\0’一起成为数组元素 //完全初始化 //你可以理解为数学上的一一映射初始化用{}大括号 //比如我有一个数组int arr[5],如果我要初始化这个数组就得找5个int 类型的常量把它们用大括号连起来 //比如:int arr[5]{1,2,3,4,5}; //这样的话元素arr[0]-arr[4]就被赋予了相应的值 //也有一种书是化的方式是省略[]中的数字直接初始化这样数组元素的大小完全由初始化的元素个数决定 //字符串的初始化 eg;char arrHello World!; //不完全初始化 // 顾名思义就是少填了几个 //但是值得注意的一点就是剩下没被初始化的元素会默认初始化为0 //所以我们对数组常见的初始化为int arr[10]{0}; //数组的有关操作 //打印 //数组输入输出的思路都是把数组元素一个一个的调用出来实现的 //eg: //#includestdio.h // //int main() { // int arr[] {1,2,3,4,5,6,7,8,9}; // for (int i 0; i 9; i) { // printf(%d , arr[i]); // } // printf(\n); // return 0; //} //输出1 2 3 4 5 6 7 8 9 //输入 //eg: //#includestdio.h // //int main() { // int arr[5] { 0 }; // for (int i 0; i 5; i) { // scanf(%d, arr[i]); // } // for (int i 0; i 5; i) { // printf(%d , arr[i]); // } // printf(\n); // // return 0; //} //输入1 2 3 4 5 // 输出 1 2 3 4 5 // //一维数组在内存中的存储 //举个例 //#includestdio.h // //int main() { // // int arr[5] { 0 }; // for (int i 0; i 5; i) { // printf(arr[%d]%p\n, i, arr[i]);//%p用来打印地址 // } // // return 0; //} // 输出 //arr[0] 000000B2AC0FFC18 //arr[1] 000000B2AC0FFC1C //arr[2] 000000B2AC0FFC20 //arr[3] 000000B2AC0FFC24 //arr[4] 000000B2AC0FFC28 //由此可见一维数组在内存中的存储时连续的 //数组元素个数的计算 //当我们想对数组中的每个元素都进行操作时就要生成其所有的下标而生成下标又要循环所以数组的元素个数就是循环次数 //虽然当我们定义数组是就知道数组的大小但当我们更改数组是就会连带着与数组大小有关的计算都要改变如果每一个都要人为去更改就很麻烦所以我们就想去寻找求数组元素个数的方法 //数组是由数组元素组成的数组元素的大小是固定的所以数组的大小等于元素数乘以一个数组元素的大小 //所以我们只要求数组的大小在用它除以一个数组元素的大小就可以得到数组元素的个数 //之前我们说过数组算是一种自定义类型是变量类型的一种那么我们就可一尝试用sizeof 来求数组的大小 //#includestdio.h // //int main() { // int arr[10] { 0 }; // printf(%zu\n, sizeof(arr)); // // return 0; //} //发现输出上显示的是40 //说明int arr[10]这个数组的大小是40字节 //我们知道一个int 类型的变量的大小是4字节 //用40数以4我们就得到了10 //我们还可以更简洁一点或更公式一点的做法 //比如size_t numsizeof(arr)/sizeof(arr[0]); //这样我们就求出了一个数组的元素个数 //多维数组 //这个概念类似于套娃 //把低一维的数组作为数组元素就成了多维数组 //二维数组 //所以二维数组就把一维数组当成数组元素的数组 //形式为 type arr_name[][]; //其中第一个[]表示行第二个[]表示列 //这样表示我个人感觉有点不好记忆 //所以我的理解是第一个[]是用来规定数组元素个数的第二个[]是用来规定每个元素的大小的 //这样理解有什么好处呢 //在后面会说到二维数组可以省略行但不能省略列有一定的帮助 //因为你若把二位数组理解成一种自定义类型的话最重要的就是定义其单个的大小 //因为数组本质上算一种集合单个元素的大小才是基础 //二维数组的存储 //我们依旧先写一个代码来演示一下 //#includestdio.h // //int main() { // int arr[2][3] {1,2,3,4,5,6}; // for (int i 0; i 2; i)//生成行下标 // { // for (int j 0; j 3; j)//生成列下标 // { // printf(arr[%d][%d]%p\n, i, j, arr[i][j]); // } // } // // return 0; //} // 输出 //arr[0][0] 000000D6276FF6E8 //arr[0][1] 000000D6276FF6EC //arr[0][2] 000000D6276FF6F0 //arr[1][0] 000000D6276FF6F4 //arr[1][1] 000000D6276FF6F8 //arr[1][2] 000000D6276FF6FC //不难发现二维数组在内存中的存储也是连续所谓分行分列更像是一种分“区块”管理 //二维数组的初始化 //有了上面对二维数组在内存中的存储对于其初始化也很容以上手了 //初始化的思路是一行一行的填满这一行填满自动填向下一行 //完全与不完全的区别就是不完全初始化会把剩下元素自动初始化为0、 //按行初始化 //这个比较特殊吧 //就是你手动初始化时可以不用把一行填满就去填下一行 //依旧写一行举个例 //#includestdio.h // //int main() { // // int arr[3][3] { {1},{2,2},{3,3,3} }; // // for (int i 0; i 3; i) { // for (int j 0; j 3; j) { // printf(%d , arr[i][j]); // } // printf(\n); // } // // return 0; //} // 输出 //1 0 0 //2 2 0 //3 3 3 //这样应该很明确了吧 //二维数组的输入输出 //跟一维数组差不多只不过要嵌套循环来生成对应的行下标和列下标 //依旧举个例子: //#includestdio.h // //int main() { // // int arr[3][3] { 0 }; // // for (int i 0; i 3; i) { // for (int j 0; j 3; j) { // scanf(%d, arr[i][j]); // } // } // for (int i 0; i 3; i) { // for (int j 0; j 3; j) { // printf(%d , arr[i][j]); // } // printf(\n); // } // // return 0; //} //输入 //1 2 3 //2 3 1 //3 1 2 //输出 //1 2 3 //2 3 1 //3 1 2 //变长数组 //全名应该叫变量长度的数组就是填入[]的可以不是常数可以是变量 //c99后新加的语法 //但是我用的是vs //vs不支持VLA所以我就不演示了 //一个小练习 //打印一串字符串但是要有动画感 //ps:把字符串存入字符数组时打印时可以直接通过数组名来打印 //举个例 #includestdio.h #includestring.h #includewindows.h int main() { char arr1[] welcome to VCTCN!!!!; char arr2[] ********************; size_t left 0; size_t right strlen(arr1) - 1; while (left right) { arr2[left] arr1[left]; arr2[right] arr1[right--]; printf(%s, arr2); Sleep(500); system(cls); } return 0; }
延伸阅读

更多相关文章

2026/9/27 6:40:40

2026年中央供料设备选购指南,靠谱渠道这样找

行业痛点分析当前中央供料设备领域面临显著的技术升级挑战。传统开放式供料系统长期存在原料粉尘扩散、配比精度不足、有害气体挥发等问题,尤其在汽车内饰地毯等对洁净度要求严苛的生产场景中,这些问题直接导致产品不良率上升与环保合规风险。据行业调研…

2026/10/1 8:29:26

高效单位固定资产管理系统,从此账目永远清晰不再混乱

“账实不符、家底不清”,这八个字几乎是很多单位资产管理者的心头刺。大到机关单位、医院学校,小到集团公司,每年年终盘点时,面对堆积如山的Excel表格和参差不齐的台账数据,财务部门和后勤部门往往焦头烂额。固定资产管…

2026/10/2 1:43:13

沉浸式翻译:终极双语网页翻译扩展完整指南

沉浸式翻译:终极双语网页翻译扩展完整指南 【免费下载链接】immersive-translate 沉浸式双语网页翻译扩展 , 支持输入框翻译, 鼠标悬停翻译, PDF, Epub, 字幕文件, TXT 文件翻译 - Immersive Dual Web Page Translation Extension 项目地址…

2026/10/2 13:58:37

Token命中率:LLM推理的“隐形加速器”

一、Token命中率到底是什么?1.1 从KV Cache说起LLM以自回归方式生成文本:每生成一个新Token,都需要“回头看”前面所有Token的Key和Value张量来计算注意力。如果每次生成都重新计算全部历史Token的K/V,计算量会随序列长度线性增长…

2026/10/2 13:58:37

(132页PPT)精益生产现场管理和改善(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 https://download.csdn.net/download/AI_data_cloud/88338604 资料解读:精益生产现场管理和改善 详细资料请看本解读文章的最后内容。 这份精益生产现场管理与改善的专业资料&#…

2026/10/2 13:53:36

【第2 章】WorkBuddy 从入门到高手

WorkBuddy 从入门到高手(第 2章):核心能力,办公六件套全拆解(超详细案例版) 这是一套面向「完全没用过 WorkBuddy」读者的系统学习路线,总共 7 章。本文是第 3 章。 系列目录:第 0 章…

2026/10/2 8:16:46

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/10/1 17:09:46

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 10:48:55

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/2 0:02:57

PWN入门:从栈溢出原理到ROP链实战

1. 这不是“学PWN”,是重新理解你每天敲的每一行C代码我第一次在CTF赛场上写出能控制程序流的exp时,手抖得连gdb的c命令都输错三次。那道题只有23行C代码,一个gets()调用,一个printf(),一个return——它甚至没开NX&…

2026/10/2 0:02:57

Windows下cudaMallocHost显存占用之谜:WDDM与TCC模式差异及优化方案

1. 一个反直觉的显存占用现象第一次在 Windows 上看到cudaMallocHost把显存吃掉的时候,我的反应是打开任务管理器反复确认了三遍。明明调用的是主机端锁页内存分配,按 CUDA 文档的说法,这块内存应该落在系统 RAM 里,跟 GPU 的显存…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑