我有一段C代码,但我不理解sizeof(...)
函数的工作原理:
#include <stdio.h>
int main(){
const char firstname[] = "bobby";
const char* lastname = "eraserhead";
printf("%lu\n", sizeof(firstname) + sizeof(lastname));
return 0;
}
在上面的代码中,sizeof(firstname)为6,sizeof(lastname)为8。
但是bobby
的宽度是5个字符,eraserhead
的宽度是11个字符。我希望16
。
为什么sizeof对于字符数组和指向字符的指针表现不同?
任何人都可以澄清吗?
firstname
是一个带有尾随的char
终止符的0
数组。 lastname
是一个指针。在64位系统上,指针的宽度为8个字节。
[sizeof
数组是整个数组的大小,对于“ bobby”,它是5个字符和一个尾随的\0
等于6。
第一个数组的大小为bobby\0
的大小。 \0
是终止符,因此为6。
[firstname[]
为空终止,将长度加1。
firstname
是6 chars
的数组,包括在字符串末尾的终止'\0'
字符。这就是sizeof firstname
为6的原因。
sizeof(...)函数的工作原理