一、普通变量初始化int、char、double、short、long long变量存储单个数据的内存单元。可以比喻成单独的小盒子一个盒子只能存放一份数据。 共 3 种书写形式初始化定义同时赋值int a 10; char ch A; double num 3.14;通俗理解一边造盒子一边直接把数据放进盒子。这是严格意义上的初始化。先定义后赋值不属于初始化int b; // 变量定义开辟内存空间 b 20; // 赋值操作修改变量存储的值通俗理解先做出空盒子后续代码再把数据放进去这个动作叫赋值不是初始化。定义变量后通过标准输入赋值int num; scanf(%d, num); char ch; scanf(%c, ch); double d; scanf(%lf, d);说明语法层面属于赋值。课堂练习中常用来给变量设置初始数据但不属于初始化选择题注意区分。 通俗理解盒子提前做好由键盘输入内容存入盒子。单个字符 char 的三种写法定义时初始化char ch M;先定义后赋值char ch; ch X;标准输入赋值char ch; scanf(%c, ch);二、字符串字符数组的四种初始化方式概念C 语言字符串是以\0字符串结束符结尾的字符序列。 使用字符串处理函数必须引入头文件#include string.h字符串字面量初始化最常用char str[100] student;说明使用双引号包裹字符串编译器自动在末尾追加\0。 通俗理解双引号写文字电脑自动在文字末尾加上结束标记。逐字符列表初始化手动添加结束符char str[8] {a,b,c,d,\0};说明逐个列出字符必须手动写入\0作为字符串结束标记。循环逐个字符读取手动添加\0原理演示代码工程不推荐char str[100]; int i 0; while (1) { scanf(%c, str[i]); if (str[i] \n) break; i; } str[i] \0;通俗理解一个字一个字从键盘读入按下回车停止最后手动补上字符串结束标记。 注意scanf(%c)会读取换行符容易出现读取异常。使用strcpy字符串复制函数完成初始化char str[100]; char temp[] hello world; strcpy(str, temp);说明将源字符串temp的内容复制到目标字符数组str。第二部分数组一、引入数组的原因如果需要存储多份同类型数据不使用数组就要单独定义多个独立变量。 例存储 100 名学生成绩需要定义 100 个不同名称的 int 变量。缺点变量数量多代码冗余批量计算、遍历数据需要重复编写大量代码无法统一批量输入、批量输出。数组定义一组相同数据类型的连续内存单元共用同一个数组名依靠下标索引区分每一个元素。通俗理解一整排连续、同类型的小盒子共用一个名字靠编号区分每个盒子。 优势只需一行代码定义配合循环完成批量输入、遍历、计算精简代码。数组分为两类一维数组、二维数组提示不带\0的普通字符数组仅作了解做题、写代码优先使用带\0的字符串数组否则会出现乱码。二、一维数组1. 一维数组定义语法数据类型 数组名[元素个数];示例int arr[10]; // 存放10个整型元素 double brr[5]; // 存放5个双精度浮点型元素 char str[20]; // 字符数组用于存储字符串两条核心规则[]内一般写常量表达式C99 标准支持变长数组 VLA变量作为长度应试场景不使用。数组下标从 0 开始。int arr[10]有效下标范围0~9访问arr[10]属于数组越界会造成未定义行为乱码、程序崩溃。通俗理解10 个盒子编号 0 到 9不存在编号 10 的盒子强行访问会出错。2. 一维数组的三种初始化方式int、double 通用① 定义数组时初始化列表赋值int arr[3] {1,2,3}; double brr[4] {1.1,2.2,3.3,4.4}; // 省略数组长度编译器自动统计元素个数 int arr[] {10,20,30};补充初始化列表提供元素数量少于数组总长度时剩余元素自动初始化为 0。 示例int arr[5]{1,2};数组元素1,2,0,0,0② 数组定义完成后循环逐个元素赋值int arr[5]; for(int i0;i5;i) { arr[i] i1; }③ 数组定义后循环读取标准输入考试高频写法int arr[5]; for(int i0;i5;i) { scanf(%d, arr[i]); }3. 计算一维数组元素个数常用公式⚠️ 限制仅能在数组定义所在函数内使用。数组作为函数形参时数组名退化为指针该公式失效。int len sizeof(数组名) / sizeof(数组名[0]);解释sizeof(数组名)整个数组占用的总字节数sizeof(数组名[0])数组单个元素占用字节数 两者相除得到数组元素总个数。4. 遍历输出一维数组全部元素int arr[5] {1,2,3,4,5}; int len sizeof(arr)/sizeof(arr[0]); for(int i0;ilen;i) { printf(%d , arr[i]); }5. 一维数组常见考点数组元素求和、求平均值、查找最值最大值 / 最小值、顺序查找、统计元素出现次数后续学习冒泡排序、选择排序、插入排序。三、普通字符数组了解即可不推荐直接使用char arr[5]{a,b,c,d,e};特点没有\0结束符不是 C 语言字符串。 缺陷不能直接使用%s格式输出无法使用strlen、strcpy等字符串库函数使用%s输出会出现乱码。建议代码中统一使用带\0的字符串。四、字符串字符数组输入输出前提字符数组作为字符串使用时数组容量 ≥ 有效字符个数 1预留位置存放\0。scanf(%s,数组名);读取连续非空白字符遇到空格、回车停止数组名本身是地址前面不加取地址符fgets(字符数组,最大读取字符数,stdin);可以读取包含空格的整行字符串printf(%s,字符数组);输出字符串读到\0停止输出五、二维数组概念二维数组可以理解为数组的数组逻辑上呈现表格形态由行、列两个下标定位元素。 通俗理解多行多列的盒子表格。1. 二维数组定义语法数据类型 数组名[行数][列数];示例int arr[2][3];2 行 3 列一共 6 个整型元素。 行下标0、1列下标0、1、2。规则初始化时行数可以省略列数不能省略。2. 二维数组初始化① 定义时初始化int arr[2][3] {{1,2,3},{4,5,6}}; // 平铺简写写法 int arr[2][3] {1,2,3,4,5,6};② 双层循环标准输入逐个赋值int arr[2][3]; int row sizeof(arr)/sizeof(arr[0]); // 获取总行数 for(int i0;irow;i) { int col sizeof(arr[i])/sizeof(arr[i][0]); // 获取当前行的列数 for(int j0;jcol;j) { scanf(%d, arr[i][j]); } }3. 遍历打印二维数组外层循环遍历行内层循环遍历当前行的每一列一行打印结束后换行。int row sizeof(arr)/sizeof(arr[0]); for(int i0;irow;i) { int col sizeof(arr[i])/sizeof(arr[i][0]); for(int j0;jcol;j) { printf(%d , arr[i][j]); } printf(\n); }六、数组高频易错点数组下标从 0 开始访问超出范围的下标属于数组越界产生未定义行为。定义数组时方括号内一般使用常量C99 变长数组应试不采用。不能直接用ba完成数组整体赋值编译报错整数数组使用循环拷贝字符串使用strcpy。局部数组不初始化元素为随机垃圾值全局数组默认全部元素初始化为 0。scanf输入普通变量需要加字符数组名代表首地址不需要加 。字符串比较不能直接使用数组名比较的是内存地址字符串比较必须使用strcmp。strlen只适用于 C 语言字符串统计有效可见字符数量不包含末尾\0。七、字符串库函数头文件#include string.hstrlen(字符串)获取字符串有效字符长度不计入\0strcpy(目标字符数组,源字符串)字符串复制把源字符串拷贝到目标数组strcat(目标字符数组,追加字符串)字符串拼接将后一段字符串追加到目标数组末尾strcmp(字符串1,字符串2)字符串比较返回值 0两个字符串完全相等返回值 0字符串 1 小于字符串 2返回值 0字符串 1 大于字符串 2标准判等写法if(strcmp(s1,s2)0)
企业数字化 ERP 产品动态
相关推荐
VC2010 Express安装与运行时环境配置实战指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 2:58:51
AssppWeb多线程下载器拆解:Range请求让数百MB的IPA飞速落盘 AssppWeb多线程下载器拆解:Range请求让数百MB的IPA飞速落盘 【免费下载链接】AssppWeb 项目地址: https://gitcode.com/gh_mirrors/as/AssppWeb
AssppWeb 是一款在 App Store 之外下载、编译并安装 IPA 的 Web 工具,其内置的多线程下载器&#x… · 2026/9/26 2:58:45
数据驱动品质管理:制造企业构建品质护城河的数字化路径 1. 品质护城河为何必须建在数据地基上做制造这一行的人都知道,品质问题最怕的不是“出了错”,而是“不知道错在哪、错了多少、为什么错”。很多工厂表面上挂着“质量第一”的标语,实际生产里却靠老师傅的经验兜底:这批料手感不对&… · 2026/9/26 2:58:39
开源界震撼消息:Baichuan-M2 配 TaoToken,挑战 GPT-5 地位! /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 3:32:44
[Bug已解决] 代理任务后文件改动难审查?TaoToken 变更快照与 diff 追踪方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 3:32:44
Git cherry-pick 实战详解:精准复制提交、冲突处理与分支管理技巧 1. 为什么说 cherry-pick 是分支合并里的“手术刀”做 Git 版本管理的这些年,我越来越觉得分支合并这件事,本质上是“把代码从一个历史点搬运到另一个历史点”的过程。大部分人最熟悉的合并方式是 merge 和 rebase,但真到了“只要某几个提交&… · 2026/9/26 3:32:44
基于Hadoop与Django的大学排名可视化分析系统设计与实现 1. 为什么值得做的选题:这个组合背后的筛选逻辑先说结论:大学排名分析搭配Hadoop和Django,是一个"看起来高深、做起来可控、答辩时能讲"的黄金三角。每年计算机毕设评选,评委手里的打分表其实就几个维度——技术覆盖面、… · 2026/9/26 3:32:44
DeepSeek Harness:本地智能体编排的轻量级运行时框架 1. DeepSeek Harness 是什么?它不是另一个“AI玩具”,而是本地智能体编排的轻量级操作系统DeepSeek Harness 这个名字刚出现时,我第一反应是——又一个套壳前端?点开 GitHub 仓库扫了一眼 README,立刻把浏览器标签页钉… · 2026/9/26 3:32:38
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46