将数组作为参数传给函数。
实现一个冒泡排序函数将一个整形数组排序
#includevoid bubble_sort(int arr[], int len) { int i = 0; for (i = 0; i < len; i++) { int j = 0; int tag = 0; for (j = len-i-1; j >0; j--) { if ( arr[j]< arr[j-1]) { int temp = arr[j-1]; arr[j-1] = arr[j]; arr[j] = temp; tag = 1; } } if (tag == 0) { return; } } } int main() { int arr[] = {5,3,7,4,6,2,8,1,7,9}; int sz = sizeof(arr) / sizeof(arr[0]); bubble_sort(arr,sz); int i = 0; for (i = 0; i < sz; i++) { printf("%d ",arr[i]); } return 0; }
数组名是什么代码块中的 tag 作为一个标志变量,产生交换时赋予1值,在遍历过程中没有产生交换tag 的值就是为0,代表了整个数组已经有序了不用再进行遍历了。
#includeint main() { int arr[] = {1,2,3,4,5,6}; printf("%pn",arr); printf("%pn", arr+1); printf("%pn",&arr[0]); printf("%pn", &arr[0]+1); printf("%pn",&arr); printf("%pn", &arr+1); return 0; }
结果:
000000C92EB5F948
000000C92EB5F94C
000000C92EB5F948
000000C92EB5F94C
000000C92EB5F948
000000C92EB5F960arr , &arr[0], &arr 打印输出的结果是一致,在这arr,&arr[0] 代表了首元素的地址,&arr 代表了整个元素的地址。为什么这么讲呢?当我们给它们每个都加 1的时候,arr 与&arr[0] 地址空间多了4个字节,而&arr 地址多了24位(16进制 48 + 8 变成 50 ,再加上16成 60,8+16 = 24个字节),6个字节,刚好是整个数组的大小。
数组名表示数组首元素的地址。
数组应用实例1:三子棋特殊:
1.sizeof(数组名),计算整个数组的大小,sizeof 内部单独放一个数组名,数组名表示整个数组。
2.&数组名,取出的是数组的地址。&数组名,数组名表示整个数组。
除这两种情况,所有的数组名都表示数组首元素地址。
Ted-Ya/TicTacToe at master (github.com)
数组应用实例2:扫雷游戏Ted-Ya/minesweeper: minesweeper gaming (github.com)
两个很有趣的小游戏,很好的帮助大家理解C 语言中数组的使用,有兴趣的同学可以参考链接中的Demo 来进行练习。
文章是基于比特鹏哥C语言学习视频的学习笔记,仅用于学习。请勿转载,请勿商用



