c字段的结构,指针和内存分配

时间:2013-07-10 18:36:16

标签: c

假设以下代码:

struct c {
  char* name;
};

int main(int argc, char *argv[]) {
  struct c c1;
  c1.name = "Ana";
  printf ("%s\n",c1.name);
  return 0;
}

我的第一反应是认为我需要在堆上或通过显式char name[] = "Anna"分配一些空间,但我上面的例子可行。编译器只是将该字符串存储在数据段中并指向它吗?换句话说,就像做一个

struct c {
  char* name = "Ana";
};

感谢。

2 个答案:

答案 0 :(得分:8)

struct c c1;
c1.name = "Ana";

您没有在此处分配内存,因为您正在使指针c1.name指向字符串文字,而字符串文字具有静态存储持续时间。这与以下内容不同:

char name[] = "Anna";

因为在这种情况下,内存被分配用于存储sting文字,然后字符串文字"Anna"复制到数组name中。您使用结构分配c1.name = "Ana"执行的操作与您执行的操作类似:

char *name = "Anna";

即。使指针指向字符串文字。

答案 1 :(得分:3)

我是C的新手,但我认为这可能和

一样
char *cThing;
cThing = "Things!";

其中printf("%s\n", cThing);将打印“Things!”,除非您在结构中声明指针。