char * []元素每个占用4个字节,char []每个占用1个字节?

时间:2016-05-29 21:07:02

标签: c arrays pointers

为什么以下代码的输出是这样的?

char str[] = {'i', 't', 'i', 's', 'm', 'e', '\0'}; //this code equates to 7 bytes
char* str[] = {'i', 't', 'i', 's', 'm', 'e', '\0'}; //this code equates to 28 bytes

3 个答案:

答案 0 :(得分:7)

此代码不符合您的想法。它使用char常量来初始化char*指针数组的元素。这样的“指针”不会指向你的角色;相反,它们具有相应字符的数值!

系统上的每个字符指针都是4个字节长,这解释了结果。

答案 1 :(得分:1)

您的编译器应该为此

发出警告
char *str[] = {'i', 't', 'i', 's', 'm', 'e', '\0'};

实际元素的类型与数组元素的类型不兼容。

答案 2 :(得分:1)

指针的大小默认为环境地址宽度,因为指针必须能够覆盖理论上可用的地址空间,即指向当前系统体系结构中可能的任何地址。在32位系统中,无论是指向char还是double。指针数组的大小等于number_of_array_elements*size_of_pointer

#include <stdio.h>

int main (void)
{
  char  str[]  = {'i', 't', 'i', 's', 'm', 'e', '\0'}; //this code equals 7*sizeof(char)
  char* str1[] = {"i", "t", "i", "s", "m", "e", "\0"}; //this code equals 7*sizeof(char*)

  printf("%zu\t%zu\n", sizeof(str), sizeof(str1));
  return 0;
}

SO post也可能值得一读。