2011-04-03 143 views
0

sizeof(test)返回24.它是一个3 char*指针的数组,它们在我的机器上各有8个字节。我的问题是C是否为角色正确分配了空间?我猜这是因为这个工程,但我想确保我做得正确。C字符串内存分配隐式?

char* test[] = {"QW", "BT", "GH"}; 
int size = sizeof(test)/sizeof(char*); 

回答

6

是的,它的确如此。字符可能在内存的只读部分。

3

是的,编译器会为字符串文字分配空间(通常在只读静态数据部分)。

2

是的。该值位于数组中使用的* char指针指向的地址的内存中。所以是的,它存储在内存中。

0

我在the Standard

的6.4.5/5重述...字符串文字被实现为具有 '字符' 类型静态存储时间的阵列...

所以,对象被分配为任何其他static变量

static int arr[100] = {0}; 
if (strcmp(foo, "bar")) exit(0); 
int *ptr = malloc(100 * sizeof *ptr); 

数组arr和字符串文字"bar"以相同的方式分配;不同于分配ptr的方式。

+0

请注意,它们也是不可修改的。 – 2011-04-03 21:41:11