0
点赞
收藏
分享

微信扫一扫

C 语言 sizeof 用法


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直接计算

希望对你有所帮助

举报

相关推荐

0 条评论