我有一个具有char *
参数的函数A. 在A()
,我使用sizeof
来计算buf的大小,但我在i686机器中得到8,在armel机器上得到4。 为什么不是128? 摘录如下:
void A(char *p) { printf("sizeof p is %dn", sizeof(p)); } int main(void) { char buf[128]; printf("sizeof buf is %dn", sizeof(buf)); A(buf); return 0; }
结果是这样的(在i686中):
sizeof buf is 128 sizeof p is 8
请告诉我原因。
因为您打印指针的大小,而不是它指向的大小。 数组衰减到指针,一旦你将它传递给一个函数,你就会有一个指针,并且会丢失原始数组的所有大小信息。
sizeof(buf)
是128*sizeof(buf[0])
,sizeof(p)只是sizeof(char*)
。
当传入函数时,它会衰减到具有原始大小(4或8)大小的普通指针。
使用strlen()因为它在末尾检查“null”并且如果数组已经初始化则给出正确的大小。
以上就是c/c++开发分享char指针作为函数参数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/523322.html