1

可能重复:
char a[] = “string”; 之间有什么区别?和 char *p = “字符串”;

数组版本是否会分配数组内存,所以一个 100 字节的字符串将在常量部分使用 100 个字节,在静态数组上使用 100 个字节,还是总共只使用 100 个字节?而指针版本,除了字符串的 100 字节之外,它会为指针分配字大小,还是将指针完全优化为常量部分地址?

4

1 回答 1

1

如果您使用的是普通计算机,则有一个.rodata部分:

#include <stdio.h>

static const char *s = /* string of 100 characters */;

int main(void)
{
  puts(s);
  return 0;
}

它在节中分配100 + sizeof(char *)字节。.rodata

#include <stdio.h>

static const char s[100] = /* string of 100 characters */;

int main(void)
{
  puts(s);
  return 0;
}

它在节中分配100字节。.rodata

于 2013-01-12T14:14:45.683 回答