‘sizeof’无效应用于不完整类型’int ‘访问指针指向的整数数组时

我正在尝试学习C中的指针并且正在编写这个小整数数组指针练习,但是遇到了一个无效的sizeof应用程序到不完整类型的int[]问题。 请告诉我哪里出错了以及如何解决。 谢谢。

 #include  int intA[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int intB[]; void int_copy(const int *source, int *destionation, int nbr) { int i; for(i=0;i<nbr;i++) { *destionation++ = *source++; } } int main() { int *ptrA = intA; int *ptrB = intB; int sizeA = sizeof(intA); int nbrA = sizeof(intA)/sizeof(int); printf("\n\n"); printf("[Debug]The size of intA is:%d\n", sizeA); printf("[Debug]That means the number of elements is:%d\n", nbrA); printf("\n\nThe values of intA are:\n"); int i; for(i=0;i%d\n", i, intA[i]); } int_copy(ptrA, ptrB, nbrA); int sizeB = sizeof(intB); int nbrB = sizeof(intB)/sizeof(int); printf("\n\n"); printf("[Debug]The size of intB is:%d\n", sizeB); printf("[Debug]That means the number of elements is:%d\n", nbrB); printf("\n\nThe values of intB are:\n"); for(i=0;i%d\n", i, *ptrB++); } } # cc -g -o int_copy int_copy.c int_copy.c: In function 'main': int_copy.c:36: error: invalid application of 'sizeof' to incomplete type 'int[]' int_copy.c:37: error: invalid application of 'sizeof' to incomplete type 'int[]' 

我观察到的奇怪的事情是当我运行gdb时,我监视到复制函数int_copy运行了9次似乎是正确的,但是复制函数之后的intB的打印只显示该数组中的一个项目。

我现在仍在努力争取指针,所以请帮助我并原谅我的无知。 非常感谢你。

intB基本上是一个指针,其上的sizeof将与int上的sizeof相同,这就是print只出现一次的原因。 intA是一个已知大小的数组,因此sizeof有效。

你需要记住sizeof不是一个运行时调用,虽然它看起来可能是语法上的。 它是一个内置的运算符,在编译时返回类型的大小(以字节为单位),在编译时intB是一个指针,该指针稍后应指向新分配的数组。

你在这里也遇到了麻烦,因为IntB没有大小,所以int_copy真的不起作用。 没有地方可以复制整数!

声明一个数组时,你必须在[]中给出大小或者使用带有值的初始值设定项,这样编译器就可以对它们进行计数并计算出它自身的大小。

实际上你的int intB[]; 语句无效,您使用哪个编译器?

另外,请注意数组和指针实际上并不相同。 但是,您可以在对需要指针的函数的调用中使用数组句柄,因此您可以将intA赋予int_copy函数,而无需将其复制到指针。 http://www.lysator.liu.se/c/c-faq/c-2.html