你想知道的数组易错知识都在这了 -C
最近,想复习一下 C 语言,所以笔者将会在掘金每天更新一篇关于 C 语言的文章! 各位初学 C 语言的大一新生,以及想要复习 C 语言/C++知识的不要错过哦! 夯实基础,慢下来就是快!
1.数组基本概念
01:数组未给定大小时,是以初始化的个数 确定 数组的大小
复制代码
02.数组不完全初始化,剩余的元素初始化为 0
复制代码
03.字符数组是否存放\0 的问题
复制代码
复制代码
04.数组创建不可以即不初始化也不指定大小
复制代码
05:一维数组和指针
复制代码
06:数组越界时的报错--Stack around the variable 'arr' was corrupter
复制代码
2.局部变量不初始化和全局变量不初始化
复制代码
在数组中的体现
3.二维数组
01:二维数组的行可以省略,列不可以省略
02:在初始化的情况下才可以省略行,在未初始化时,不可以省略
复制代码
03:二维整形数组
复制代码
复制代码
04:二维字符数组
复制代码
原因:每一个字符串后面都没有放\0
复制代码
对于二维字符数组**,列的大小应该取决于存放的最长的字符串的长度+1,不然就放不下\0,造成越界访问!**
复制代码
4.冒泡排序
复制代码
代码
复制代码
优化版
优化版冒泡排序:
当第某一趟冒泡排序没有进行交换时,说明已经时有序的了
复制代码
定义一个标志变量
若此次冒泡排序要进行交换,则说明无序,令 flag = 0,
再次进行下一趟冒泡排序时,再令 flag=1,继续判断是否要交换,若此次不需要交换了(flag 恒为 1),说明已经有序了,break 跳出
5.关于数组名的理解
复制代码
其余情况下,数组名代表的是数组首元素地址
arr 和 &arr[0] :代表的都是首元素地址
&arr:代表的是整个数组的地址
指针+1 的步长:取决于指针指向数据的类型
&arr+1 :跳过整个数组
&arr[0] + 1 :跳过一个元素,第二个元素地址
arr + 1 :跳过一个元素,第二个元素地址
数组名再传递给参数的时候,会降级变成首元素地址
数组传参-实际上传过去的是数组首元素地址
复制代码
今天就先到这吧~感谢你能看到这里!希望对你有所帮助!欢迎老铁们点个关注订阅这个专题! 同时欢迎大佬们批评指正!
版权声明: 本文为 InfoQ 作者【芒果酱】的原创文章。
原文链接:【http://xie.infoq.cn/article/65d0f16808460133f4972a5f0】。文章转载请联系作者。
评论