sizeof 根据这个函数的名称,大概可以知道该函数的用途,sizeof 计算大小
比如:sizeof(int) 计算int类型所占用的字节数
在c 中int类型占用四个字节 所以sizeof(int)=4
我打算编写希尔排序,但是我想希尔排序单独的写成为一个函数,在mian函数中调用
int main(){
int arrs[8]= {7,6,9,3,1,5,2,4};
sawper(arrs);
printf("排序之后:");
for(int i=0;i<8;i++){
printf("%d,",arrs[i]);
}
}
void sawper(int arrs []){
......
}
那么在sawper 这个函数中我要完成对arrs的排序,既然是使用希尔排序的算法,那么我要获取到sawper中获取到数据arrs的长度
可是此处遇到了问题
int main(){
int arrs[8]= {7,6,9,3,1,5,2,4};
int length=sizeof(arrs);//length 的值为32
sawper(arrs);
printf("排序之后:");
for(int i=0;i<8;i++){
printf("%d,",arrs[i]);
}
}
void sawper(int arrs[]){
......
int length=sizeof(arrs);//length的值为4
}
同一个数组,我在主函数中计算的长度是32 我能理解,这个32 是数组中每个元素的长度之和
数据一共有8个元素,并且每个元素的长度为4 所以length=4*8=32
那么为什么sawper 中长度却变成了 4
当数组作为形式参数在函数中传入的时候 :
实质是地址的传递,将数组的首地址传给形参,形参和实参共用同一存储空间,形参的变化就是实参的变化。
因此在c语言中,当我们给一个函数传递数组的时候,同时也要把数据的长度,传递过去
int main(){
int arrs[8]= {7,6,9,3,1,5,2,4};
sawper(arrs,8);
for(int i=0;i<8;i++){
printf("%d,",arrs[i]);
}
}
void sawper(int arrs[],int size){
......
}
可以看出,sizeof 是计算变量/类型在系统中所占用的字节数,那么我们在函数的调用的时候,如果将数组作为形式参数传递的话,一定要注意其长度不能用sizeof直接计算
希望对你有所帮助