C++ 数组函数的大小返回int而不是数组的大小

C++ 数组函数的大小返回int而不是数组的大小,c++,c,arrays,sizeof,C++,C,Arrays,Sizeof,输出总是8!我想知道这个数字是从哪里来的,如何才能得到数组大小的正确大小,即6 #include <stdlib.h> #include <stdio.h> void cal(int a[]) { printf("the size of array is= %d\n", (int)(sizeof(a)/(sizeof)(int))); } int main () { int lis[]={1,2,3,4,5,6,7,8,9}; cal(&

输出总是8!我想知道这个数字是从哪里来的,如何才能得到数组大小的正确大小,即6

#include <stdlib.h>
#include <stdio.h>

void cal(int a[])
{
    printf("the size of array is= %d\n", (int)(sizeof(a)/(sizeof)(int)));
}

int main ()
{
    int lis[]={1,2,3,4,5,6,7,8,9};
    cal(&lis[3]);
    return 0;
}

当您只有一个int指针时,无法计算int数组的大小。您将始终获得指针大小

你可以试试这个不确定这是不是个好主意:-

#define arrSz(a) (sizeof(a)/sizeof(*a))

数组是指向数据类型的指针。sizeof a将导致指向数组的指针的大小。sizeof*a将取消对指针的引用并返回数据类型的大小。sizeof*a*numElems将返回数组中的字节数。@ppeterka66不,不是。OP:我怀疑输出是8,更不用说编译了。@LuchianGrigore:为什么不编译?他将int*传递给一个函数,该函数需要int*@JohnBode,因为sizeofint。只有当a实际上是数组时,您的定义才起作用。在OP的代码中,a是一个指针。我明白了,因为我们只能得到一个int指针,所以我们不能有大小。这很有帮助。谢谢,不客气。如果这对你有帮助,不要忘记接受这个答案