一维字符数组.二维整形数组
C语言一维字符数组 & 二维整型数组
今天重点学习一维字符数组和二维整型数组,调试字符串拼接踩了一堆坑,把知识点整理记录下来,夯实C语言基础✨
🔹一维字符数组(字符串)
C语言本身没有string字符串类型,字符串本质就是以 \0 结束的一维char字符数组, \0 是字符串结束标志,系统靠它判断字符串到哪里终止,没有结束符输出就会出现随机乱码。
1.初始化两种写法
char str[20] = {"hello"};
char str[20] = {'h','e','l','l','o','\0'};
双引号初始化会自动在末尾补 \0 ;大括号单个字符赋值,必须手动加上 \0 。
2.输入输出
使用 %s 可以直接对数组整体读写,不需要循环逐个字符。
⚠gets函数已经被废弃,尽量使用fgets;fgets有大坑:会把按下回车产生的 \n 换行符一并读到数组内部。做字符串拼接、字符串比较的时候,换行符会藏在字符串中间,导致代码逻辑看起来完全失效,需要手动把 \n 替换成 \0 。
3.手写字符串拼接(不使用strcat库函数)
逻辑:先用while循环遍历,找到第一个字符串 \0 所在下标(字符串末尾),从这个位置开始,把第二个数组的字符逐个复制过来,全部复制完成后,一定要手动追加 \0 。
自己写代码的时候犯过错:直接从数组下标0开始复制,把原本的字符串全部覆盖,拼接直接失败,调试很久才定位到问题。
🔹二维整型数组
二维整型数组可以类比一张表格, int arr[行][列] ,本质是数组里面存放一维数组。
1.初始化方式
①全部赋值: int arr[3][2]={{1,2},{3,4},{5,6}};
②简写赋值: int arr[3][2]={1,2,3,4,5,6};
③部分初始化:没有赋值的元素系统自动默认补0。
行下标可以省略,列下标绝对不能省略。
2.元素访问
格式: arr[i][j] ,i代表行下标,j代表列下标;下标全部从0开始计数。
比如3行2列数组,行取值0~2,列取值0~1,访问超出范围下标,数组越界,程序会异常。
3.遍历输出
必须两层循环嵌套:外层循环控制行,内层循环控制列。
plaintext
for(int i=0;i<3;i++) //遍历每一行
{
for(int j=0;j<2;j++) //遍历当前行每一列
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
💡今日踩坑总结
1.字符数组千万留意 \0 结束符,漏掉直接乱码
2.fgets读取回车换行符是隐藏陷阱
3.字符串拼接不能从数组开头拷贝,要跳到原有字符串末尾
4.二维数组列下标不可省略,下标从0开始,警惕数组越界
数组是C语言非常核心的部分,很多底层操作都离不开,还要多加练习