☰
初识C语言:数组作为函数参数
2026/9/28 5:23:04 网站建设 项目流程

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[j+1]) { 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 10

2.什么是数组名

探讨数组名和首元素的地址

(1)一维数组数组名

int main() { int arr[10]; printf("%p\n",arr); // ===>首元素地址: 00DFFC40 // arr + 1 是指:指针arr向后偏移 1 位 printf("%p\n",arr+1); // ===>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",&arr+1); // ===>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",arr+1); // ===>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",&arr+1); // ===>00D8F7D0 printf("---------------"); int sz = sizeof(arr); printf("%d\n",sz); return 0; }

(3)总结

数组数组名确实能表示首元素地址,但有两个例外:

1.sizeof(数组名),这里的 “数组名” 表示整个数组,计算的是整个数组的大小,单位是字节

2.&数组名,这里的 “数组名” 表示整个数组,取出的是整个数组的地址

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询