核心内容摘要
为什么选择sniffglue?对比Wireshark的6大安全优势解析
二维数组在内存中的存储像一维数组一样我们如果想研究二维数组在内存中的存储方式我们也是可以打印数组所有元素的地址的代码如下可自行验证#includestdio.hint main() {int arr[3][5] { 0 };int i 0;int j 0;for (i 0; i 3; i) {for (j 0; j 5; j) {printf(arr[%d][%d] %p\n, i, j, arr[i][j]);}}return 0;}从运行结果可以看出二维数组中的每个元素都是连续存放的。
C99中的变长数组简称VLA在C99之前C语言在创建数组的时候数组的大小只能使用常量、常量表达式或者如果我们初始化数据的话可以省略数组的大小这样的语法限制让我们创建数组时不够灵活有时候数组大了浪费空间小了不够用。
C99给定一个变长数组variable-length array,简称VLA的新特性允许我们使用变量指定数组的大小。
例如int n a b;int arr[n];上面示例中数组arr是变长数组,因为它的长度取决于变量n的值,编译器无法事先确定只有运行时才知道n是多少变长数组的根本特征就是数组长度只有运行时才能确定所以变长数组不能初始化它的好处是程序员不必在开发时随意一维数组指定一个估计的长度程序可以在运行时为数组分配精确的长度有一个比较迷惑的点变长数组的意思是数组的大小是可以使用变量来指定的在程序运行的时候根据变量的大小指定数组的元素个数而不能说数组的大小是可变的数组的大小一旦确定就不能再变化遗憾的是在vs 2022上虽然支持大部分C99的语法但是不支持C99中的变长数组没有办法进行测试。
数组练习
1练习一多个字符从两端移动向中间汇聚编程题多个字符从两端移动向中间汇聚代码如下可自行测试#includestdio.hint main() {char a1[] welcome to hunan...;char a2[] ###################;int l 0;int r strlen(a
- 1;printf(%s\n, a
;while (l r) {Sleep(
;a2[l] a1[l];a2[r] a1[r];l;r--;printf(%s\n, a
;}return 0;}
2练习二二分查找二分查找又称折半查找是一种在有序数组中快速查找目标值的算法。
核心思想 每次比较数组中间的元素与目标值 如果相等查找成功 如果中间值太大就在左半部分继续找 如果中间值太小就在右半部分继续找。
如此反复每次将查找范围缩小一半。
代码附在最后可自行验证#includestdio.hint main() {int arr[] { 1,2,3,4,5,6,7,8,9,10 };int len sizeof(arr) / sizeof(arr[0]);int left 0;int right len - 1;int key 7;int find 0;int mid 0;while (left right) {mid (left right) / 2;if (arr[mid] key) {right mid - 1;}else if (arr[mid] key) {left mid 1;}else {find 1;break;}}if (1 find) {printf(找到了下标是%d\n, mid);}else {printf(找不到\n);}return 0;}感谢你阅读这篇关于C语言二维数组的入门指南希望这篇文章能帮你打牢基础、理清概念。
编程之路贵在实践与交流——如果你有任何疑问、建议或者想分享你的学习心得欢迎在评论区留言也别忘了关注我的博客我会持续更新更多通俗易懂、干货满满的编程教程。
让我们一起在代码的世界里不断进步共同成长下一期预告《单身狗编程题》即将上线深入更多实用技巧与经典案例