我有:
void func()
{
char *s;
strcpy(s,"bla bla");
}
"bla-bla"存放在什么地方?即使我没有定义它,它也被认为是"constchar*"吗??
字符串文字是无名称的数组对象,存储在静态内存中,即存储全局变量的同一内存中。字符串文字永远存在:它们在程序开始时存在,并一直持续到程序结束(就像全局变量一样)。
但是,请注意,在您的代码示例中,"blah blah"
是字符串文字。但是您的s
只是一个从字符串文字初始化(通过复制数据)的局部变量。您的s
与任何其他局部变量具有相同的生存期-只要控件通过func
,它就会存在。
还要注意的是,C中的字符串文字不被认为是const chart *
,因为您似乎不正确地认为这一点。C语言中"blah blah"
的类型实际上是char [10]
。数组类型可以衰减为指针类型,但即使在这种情况下,它也将是char *
而不是const char *
。
"blah blah"
存储在堆栈上,就像函数中声明的任何其他自动变量或数组一样。
建筑
char s[] = "blah blah";
相当于
char s[] = {'b', 'l', 'a', 'h', ' ', 'b', 'l', 'a', 'h', ' '};
并且它初始化数组。
您可以将字符数组视为char * const
,因为它们的行为方式与数组几乎相同,但从技术上讲,数组就是数组,指针就是指针。然而,这与const char *
不同。char * const
表示不能修改指针,const char *
表示不能通过该指针修改内存。