"Hello world"作为静态字符串实际上存储在数据区,但写程序的人不知道这个地址,而程序本身知道。当某一函数以
{ char p[] = "Hello world"; ...}
方式使用此静态字符串时,实际上相当于:
char p[12];
strcpy(p, "Hello world");
....
p[12]是在栈里临时分配的。虽然p指向的内容是"Hello world", 但是这是复制品,不是原件。当函数结束,char p[]就被程序回收了,所以p[]的内容就不再是"Hello world"了。
但如果以char *p="Hello world"的方式使用,p指向的是静态字符串存储的位置,也就是说指向"Hello world"的原件,当然没有问题了。 如果想坚持用char p[]而不使用char *p, 有效方法必须是:
{
static char p[]="Hello world";
return p;
}
原因我想很清楚了。static char []是静态的,存储在数据区。
相关文章
- Android:finish()与System.exit(0)之间的区别
- iOS中属性与成员变量的区别
- 关于C# 中的布尔运算符 "&" "|” 与 其类似的条件布尔运算符 "&&" "||" 区别说明。
- 谈谈数据库中MyISAM与InnoDB区别 针对业务类型选择合适的表
- 浅谈mysql中varchar(m)与char(n)的区别与联系
- Hibernate中load与get,update与merge方法的区别
- 深入理解jQuery中live与bind方法的区别
- override与overload的区别
- 基于jquery中children()与find()的区别介绍
- Asp.net中request.QueryString与request.Params的区别 【转】