字符数组的大小和字符指针的大小

use*_*871 17 c sizeof char

我有一段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字节宽.

  • @PHIfounder:作为**,C中的"字符串"由以"'\ 0"字符**结尾的字符序列表示,使用`strlen()`获取"字符串"的长度.这适用于"真实"字符数组,也适用于指向后者的指针.在这种情况下,存储字符的方式和位置并不重要.实际上,保存字符串的变量不一定需要匹配"字符串"的长度.另一方面,如果它感兴趣的是**声明变量使用的字节数**,请使用`sizeof`运算符. (2认同)
  • 存储字符串`s`(或由`s`指向)所需的字节数是`strlen(s)+ 1`. (2认同)

Yu *_*Hao 6

sizeof数组是总数组的大小,在"bobby"的情况下,它是5个字符,一个尾随\0等于6.

sizeof 指针是指针的大小,通常在32位机器中为4个字节,在64位机器中为8个字节.