char指针和字符串的大小

时间:2015-04-23 16:41:39

标签: c++ pointers

我测试char数组,指针和字符串的长度/大小,如下代码所示 为什么sizeof(pArray)是8?我猜这是一个应该是4的指针 为什么sizeof(str)是8而不是6或7? 为什么sizeof("abcdef")是7而不是6?

char array1[10] = {'a', 'b'};
char array[10] = "abcdef";
const char * pArray = "abcdef";
string str = "abcdef";
printf("array1:%d, array:%d, pArray:%d, str:%d,strsize:%d, strlen:%d,  raw:%d\n", sizeof(array1), sizeof(array), sizeof(pArray), sizeof(str), str.size(), str.length(), sizeof("abcdef"));

节目输出:

array1:10, array:10, pArray:8, str:8,strsize:6, strlen:6,  raw:7

2 个答案:

答案 0 :(得分:4)

  • $是10,因为你用10个元素声明它。
  • 出于同样的原因,
  • sizeof(array1)也是10;
  • sizeof(array) 8是因为你在64位机器上,所以8字节= 64位;
  • 由于sizeof(pArray)是类结构的大小,您将获得唯一内部指针的大小,在您的情况下是8字节(因为您在64位计算机中,这也可以从平台变为平台;)
  • sizeof(str)str.size()返回相同的内容 - 它是字符串本身的长度;
  • str.length()是7,因为C中的常量字符串总是在末尾获得隐式字符sizeof("abcdef")以正确终止,因此它在字符串中是1个字节(6 + 1 = 7); < / LI>

答案 1 :(得分:2)

指针的大小取决于架构。如果在x64上编译,它将是8,在8/16位CPU上,它可能是16(少则非常罕见)。 字符串常量将始终在末尾获得隐式"\0"以正确终止字符串。因此在将字符串const指定给固定大小的数组时要小心!