一、数组名
//数组名是什么? //数组名是数组首元素的地址 //但是有2个例外 //1.sizeof(数组名) - 数组名表示整个数组 - 计算的是整个数组的大小,单位是字节 //2. &数组名 - 数组名表示整个数组 - 取出的是整个数组的地址 int main() { int arr[10] = { 0 }; printf("%p\n", &arr);// &arr取出的是数组的地址 printf("%p\n\n", &arr + 1); printf("%p\n", arr); printf("%p\n\n", arr + 1); printf("%p\n\n", &arr[0]); int sz = sizeof(arr);//数组名表示整个数组 printf("%d\n\n", sz); printf("%p\n", &arr[0]); printf("%p\n", &arr);//数组名是首元素的地址 return 0; }
由上图可以看出,第一组地址数大小之差是八进制下的28,转换为十进制就是40,是数组arr所有元素大小之和,所以&arr取出的是数组的地址,第二组地址数与第一组对应,证明&arr取出的是数组的地址;
打印出40,说明sizeof(数组名)表示的是整个数组,sizeof(数组名)计算的是整个数组的大小,所以打印出的值是40;
最后一组数的地址数一样,说明数组名是数组首元素的地址。
二、数组作为函数参数
注:冒泡排序思想是两两相邻的元素进行比较,并且可能进行交换。
void bubble_sort(int arr[], int sz) {//形参arr本质是指针 //确定趟数 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 tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } } int main() { int arr[] = { 9,8,7,6,5,4,3,2,1,0 }; //排序为升序 - 冒泡排序 //计算数组元素个数 int sz = sizeof(arr) / sizeof(arr[0]); bubble_sort(arr, sz); return 0; }