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

问题描述 投票:17回答:6

我有一段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对于字符数组和指向字符的指针表现不同?

任何人都可以澄清吗?

c char sizeof
6个回答
25
投票

firstname是一个带有尾随的char终止符的0数组。 lastname是一个指针。在64位系统上,指针的宽度为8个字节。


6
投票

[sizeof数组是整个数组的大小,对于“ bobby”,它是5个字符和一个尾随的\0等于6。


3
投票

第一个数组的大小为bobby\0的大小。 \0是终止符,因此为6。


2
投票

[firstname[]为空终止,将长度加1。


2
投票

firstname是6 chars的数组,包括在字符串末尾的终止'\0'字符。这就是sizeof firstname为6的原因。


0
投票

sizeof(...)函数的工作原理

© www.soinside.com 2019 - 2024. All rights reserved.