我正在尝试学习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("nn"); printf("[Debug]The size of intA is:%dn", sizeA); printf("[Debug]That means the number of elements is:%dn", nbrA); printf("nnThe values of intA are:n"); int i; for(i=0;i%dn", i, intA[i]); } int_copy(ptrA, ptrB, nbrA); int sizeB = sizeof(intB); int nbrB = sizeof(intB)/sizeof(int); printf("nn"); printf("[Debug]The size of intB is:%dn", sizeB); printf("[Debug]That means the number of elements is:%dn", nbrB); printf("nnThe values of intB are:n"); for(i=0;i%dn", 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
函数,而无需将其复制到指针。
以上就是c/c++开发分享‘sizeof’无效应用于不完整类型’int ‘访问指针指向的整数数组时相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522905.html