C/C++ 基础笔记(三)

发布时间:2026/6/10 14:39:55
C/C++ 基础笔记(三) 本篇核心知识数组定义与特性、数组初始化、数组内存布局、字符数组、进制输出、随机数生成、冒泡排序、数组长度计算、终端操作一、数组基础概念数组是相同类型数据的有序集合由数组名、下标索引访问元素元素是存储数据的变量。特性长度固定定义后元素个数不可修改。内存连续一次性分配连续内存块访问高效。下标规则下标从0开始范围0~长度-1。长度限制定义时长度必须为整型常量不能是变量。代码示例// 定义长度为5的int数组 int arr[5]; // 下标访问元素 arr[0] 10; arr[1] 20;二、数组初始化概念定义数组时给元素赋初始值用大括号{}包裹初始值列表。特性类型匹配初始值类型必须与数组类型一致。长度省略有初始值列表时可省略长度自动匹配元素个数。默认补零初始值个数 数组长度时剩余元素默认补 0。禁止超界初始值个数 数组长度 → 编译错误。赋值限制C 仅定义时可用{}整体赋值定义后不可直接用{}赋值。代码示例// 完整初始化 int arr1[3] {1, 2, 3}; // 省略长度自动设为3 int arr2[] {4, 5, 6}; // 部分初始化剩余补0 int arr3[5] {7, 8}; // 等价于 {7,8,0,0,0} // 错误定义后不能整体赋值 // arr1 {9,10,11};三、字符数组概念存储字符的数组可直接用字符串初始化末尾自动补字符串结束符\0。特性字符串初始化字符数组长度 ≥ 字符串长度 1需存\0。超界错误字符串长度 数组长度 → 内存越界错误。结束符字符串默认末尾带\0占 1 字节。代码示例// 字符数组初始化 char str1[5] {a,b,c,\0}; // 直接用字符串初始化自动补\0 char str2[6] hello; // 错误字符串长度5数组长度5无空间存\0 // char str3[5] world;四、数组长度计算概念通过sizeof运算符计算数组总字节数与单个元素字节数推导数组元素个数。特性公式数组长度 sizeof (数组名) /sizeof (数组名 [0])仅适用于定义好的数组不适用于函数传参后的数组退化为指针。代码示例int arr[5] {1,2,3,4,5}; // 计算长度20/45 int len sizeof(arr)/sizeof(arr[0]);五、进制输出控制概念C 中cout可设置输出进制支持十进制、八进制、十六进制。特性控制符dec十进制默认oct八进制hex十六进制持久生效设置后持续生效直到重新指定进制。代码示例#include iostream using namespace std; int main() { int num 10; cout dec num endl; // 十进制10 cout oct num endl; // 八进制12 cout hex num endl; // 十六进制a int num1 20; cout num1 endl; // 默认以上一次结束的十六进制输出14 return 0; }六、随机数生成概念通过库函数生成随机数解决固定随机数问题需设置随机种子。特性核心函数rand()生成 0~ 最大随机值的整数。srand()设置随机种子参数为无符号整数。time(nullptr)获取系统时间戳随时间变化用于动态种子。范围控制rand()%xy→ 生成y ~ xy-1的随机数。头文件需引入time.h。代码示例#include iostream #include time.h using namespace std; int main() { // 设置随机种子仅需执行一次 srand((unsigned int)time(nullptr)); // 生成10~99的随机数 int num rand()%9010; cout num endl; return 0; }七、冒泡排序概念基础排序算法通过相邻元素两两比较、交换将大元素逐步 “冒泡” 到数组末尾。特性两层循环外层控制排序轮数共长度-1轮。内层相邻元素比较交换每轮减少 1 次比较末尾元素已排序。排序结果每轮结束当前最大元素归位。稳定性稳定排序相等元素顺序不变。代码示例#include iostream using namespace std; int main() { int arr[5] {3,1,4,2,5}; int len sizeof(arr)/sizeof(arr[0]); // 冒泡排序 for(int i0; ilen-1; i){ // 外层轮数 for(int j0; jlen-1-i; j){ // 内层比较次数 if(arr[j]arr[j1]){ // 前后则交换 int temp arr[j]; arr[j] arr[j1]; arr[j1] temp; } } } // 输出排序后数组 for(int i0; ilen; i) cout arr[i] ; return 0; }八、终端常用操作概念控制终端显示、获取按键输入的基础操作。特性清屏system(cls)清空终端内容。按键获取_getch()无回显获取按键支持 WASD、方向键控制无需回车确认。代码示例#include iostream #include conio.h // _getch()头文件 using namespace std; int main() { system(cls); // 清屏 char key _getch(); // 获取按键 cout 按下的键 key endl; return 0; }九、拓展getchar/putchar/gets/puts/getch/scanf/printf特性单个字符 getchar() 读一个字符 putchar() 写一个字符 字符串 gets() 读一行字符串危险别用 puts() 输出一行字符串,自动换行 控制台 getch() 不回显读一个字符按任意键继续 格式化 scanf() 格式化输入 printf() 格式化输出