初识C语言:数组作为函数参数
1.冒泡排序的错误设计(1)把数组中的数据升序排列a.数组传参的方式数组、指针b.形参是数组的形式 ,实际上是指针存放实参数组的是首元素的地址void bobble_sort(int arr[],int sz) { // 趟数 int i 0; for(i 0; i sz - 1; i) { // 每趟冒泡排序两两配对比较要进行的次数 int j 0; for(j 0; j sz -1-i; j) { if(arr[j] arr[j1]) { int temp arr[j]; arr[j] arr[j 1]; arr[j 1] temp; } } } } int main() { int arr[] {7,8,5,3,4,9,0,1,2,6,10}; // 采用冒泡算法进行排序核心思想是————两个相邻两个元素进行比较 int sz sizeof(arr)/sizeof(arr[0]); bubble_sort(arr,sz); //数组在传参时只需传数组名即可,arr此处为首元素地址 for(int i 0; i sz - 1; i) { printf(%d ,arr[i]); } return 0; } // 0 1 2 3 4 5 6 7 8 9 102.什么是数组名探讨数组名和首元素的地址(1)一维数组数组名int main() { int arr[10]; printf(%p\n,arr); // 首元素地址 00DFFC40 // arr 1 是指指针arr向后偏移 1 位 printf(%p\n,arr1); // 00DFFC44 printf(---------------\n); printf(%p\n,arr[0]); // 首元素地址 00DFFC40 // arr[0] 1 是指指针arr向后偏移 1 位 printf(%p\n,arr[0]1); // 00DFFC44 printf(---------------\n); printf(%p\n,arr); // 整个数组的地址 00DFFC40 // arr 1 是指指针arr向后偏移 1 位 //但由于arr指的是整个数组它向后偏移 1 位则直接跳到末尾元素后面的地址 printf(%p\n,arr1); // 00DFFC68 printf(---------------); int n sizeof(arr); printf(%d\n,n); // 40 return 0; }(2)二维数组数组名int main() { int arr[3][4]; printf(%p\n,arr); // 首元素地址 00D8F7A0 printf(%p\n,arr1); // 00D8F7B0 printf(---------------\n); printf(%p\n,arr[0]); // 首元素地址 00D8F7A0 printf(%p\n,arr[0]1); // 00D8F7B0 printf(---------------\n); printf(%p\n,arr); // 整个数组的地址 00D8F7A0 printf(%p\n,arr1); // 00D8F7D0 printf(---------------); int sz sizeof(arr); printf(%d\n,sz); return 0; }(3)总结数组数组名确实能表示首元素地址但有两个例外1.sizeof(数组名)这里的 “数组名” 表示整个数组计算的是整个数组的大小单位是字节2.数组名这里的 “数组名” 表示整个数组取出的是整个数组的地址