今天写了一个冒泡排序和快排,就想着能不能写一个函数可以获取数组的长度,结果遇到了问题
我是这样写的
int getLen(int arr[]){
return sizeof(arr)/sizeof(arr[0]);
}
//报错 warning: ‘sizeof‘ on array function parameter ‘arr‘ will return size of ‘int *‘
报错是数组作为参数时会当成指针,arr为数组首元素的地址,所以就不能 sizeof(arr)了
所以报错了
如果求sizeof(*arr),结果为 4,我验证的结果
#include<stdio.h>
void getLen(int arr[]){
printf("%x\n",arr); //65fe00
printf("%d\n",*arr); //12
printf("%d\n",sizeof(*arr)); //4
printf("%x\n",arr+1); //65fe04
printf("%d\n",*(arr+1)); //23
}
int main(){
int arr[] = {12,23,34,45,56};
getLen(arr);
}
所以写打印数组和冒泡的函数时,传一个长度参数进去
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
void Init_Ar(int *ar,int n){ //初始化数组
assert(ar != NULL);
for(int i = 0; i< n;i++){
ar[i] = rand()%100 + 1;
}
}
void Print_Ar(int *ar,int n){ //打印数组
for(int i = 0;i < n;i++){
printf("%d\t ",ar[i]);
if((i+1)%5 == 0){
printf("\n");
}
}
}
void swap(int *a,int *b){ //交换
int temp = *a;
*a = *b;
*b = temp;
}
void BubbleSort(int *ar,int n){ //冒泡
for(int i = 0; i < n-1; i++){
bool tag = true;
for(int j = 0; j < n-i-1; j++){
if(ar[j] > ar[j+1]){
swap(ar+j, ar+j+1);
tag = false;
}
}
if(tag) break;
}
}
int main(){
int br[] = {};
Init_Ar(br,100);
BubbleSort(br,100);
Print_Ar(br,100);
}
结果
1 2 3 4 5
6 6 7 7 9
12 12 13 17 17
19 19 22 23 24
24 24 25 27 27
28 28 30 30 30
30 32 34 35 36
36 37 38 38 39
39 40 41 41 42
42 42 42 43 43
43 45 45 46 47
48 48 49 49 51
54 54 55 57 58
59 60 62 63 63
65 65 65 67 68
68 69 70 70 71
72 74 77 79 79
82 83 83 85 89
91 91 92 92 93
94 95 96 96 100
原文:https://www.cnblogs.com/fgxr/p/14815723.html