我有一段C代码,我不明白该sizeof(...)函数是如何工作的:
#include <stdio.h>
int main(){
const char firstname[] = "bobby";
const char* lastname = "eraserhead";
printf("%lu\n", sizeof(firstname) + sizeof(lastname));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,sizeof(firstname)是6,sizeof(lastname)是8.
但bobby宽5个字符,宽eraserhead11个.我期待16.
为什么sizeof对于字符数组和指向字符的指针表现不同?
任何人都可以澄清吗?
alk*_*alk 25
firstname是一个char带有尾随0终止符的数组.lastname是一个指针.在64位系统上,指针是8字节宽.
sizeof数组是总数组的大小,在"bobby"的情况下,它是5个字符,一个尾随\0等于6.
sizeof 指针是指针的大小,通常在32位机器中为4个字节,在64位机器中为8个字节.