数组名作为参数传递给函数

C语言中,定义数组后可以用sizeof命令获得数组的长度(可容纳元素个数),例如 sizoef(arr)/sizeof(arr[0]) ,即数组占用总字节/类型的字节数。如:

int main(){
    int arr[] = {1,2,3,4,5,6};
    printf("main()得出的数组长度为-> %d",sizeof(arr)/sizeof(arr[0]));
}

但是,通过传递数组名参数到子函数中,以获得数组长度是不可行的。如:

void getLength(int[] arr)
{
int length;
length=sizeof(arr)/sizeof(arr[0]);
} 

这样是错误的,得到的结果永远是1或2,因为,数组名作为参数传递给函数时,作为该参数的数组名被处理为首地址,arr是函数参数,到了子函数中,arr只是一个指针(地址,系统在子函数运行时,是不知道arr所表示的地址有多大的数据存储空间,这里只是告诉函数:arr一个数据存储空间首地址),所以,sizoef(arr)的结果是指针变量arr占内存的大小,一般在32位机上是4个字节,64位是8个字节。arr[0]是int类型,sizeof(a[0])也是4个字节,所以,32位机的结果永远是1,64位机的结果永远是2。

因此,获得数组长度,只能在数组定义所在的代码区中,如果想要将数组的长度传到子函数中可以先在数组定义所在的代码区中求出数组的长度,然后再传入子函数中。

#include<stdio.h>
void getLength(int arr[]){
    int n = sizeof(arr)/sizeof(arr[0]);
    printf("getLength()得出的数组长度为-> %d",n);
}
int main(){
    int arr[] = {1,2,3,4,5,6};
    printf("main()得出的数组长度为-> %d",sizeof(arr)/sizeof(arr[0]));
    printf("\n");
    getLength(arr);
}

《数组名作为参数传递给函数》

    原文作者:江冷易水寒
    原文地址: https://blog.csdn.net/sinat_41721615/article/details/105066665
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞