从C中的参数获取int数组的大小

时间:2014-10-26 20:45:28

标签: c

我正在学习C语言。

我需要 int数组的大小(在函数的参数中传递)。

我可以使用:

获取int数组的大小
int size = sizeof(arr) / sizeof(int);    

但是,当我在参数化数组中使用相同的代码时,上面的代码对我来说不起作用。

程序:

void printArraySize(){
    int arr[]= {1, 2, 3, 4, 6, 7};
    int size = sizeof(arr) / sizeof(int);
    printf("\nSize = %d",size); // resulting right value
    doStuff(arr);
}
void doStuff(int arr[]){
    int size = sizeof(arr) / sizeof(int); // resulting 1
    printf("\ndoStuff::Size = %d",size);
}

输出:

尺寸= 6
doStuff :: Size = 1

“尺寸”值显示正确。但是,为什么 doStuff :: Size 是1?
虽然,我在两个函数中都使用相同的概念,但差别只是参数化数组。
如果我做了,请提出你的建议或纠正错误。

1 个答案:

答案 0 :(得分:1)

当一个数组传递给一个函数时,它会被转换成指向它的第一个元素的指针。所以你在函数中做的事情基本上等同于:

int size = sizeof(int*) / sizeof(int); // resulting 1

如果要传递大小,请将其作为另一个参数传递给函数。

例如,

void doStuff(int arr[], size_t size){
..
}

并将该函数调用为:

doStuff(arr, size);

您应该真正使用size_t作为sizeof运算符返回size_t,其可能大于int