您的位置:首页 > 其它

趣学 C 语言(四)—— 字符串与字符数组

2016-05-11 21:57 316 查看
char *ps1 = "hello";
// 字符串
// ps1 ⇒ 类型为 char*
// const char *
char ps2[] = "hello";
// 字符串
// ps2 ⇒ 类型为 char[6]
// char* const


两者最根本的区别在于,
ps1
指向的这个字符串是个常量, 不可改变,程序在编译期间就为
"hello"
这个字符串分配了固定的空间,它被存储在全局静态区中。

ps2
是个变量, 其内容可以被更新和改变,
ps2
可以理解为一个不可改变其指向位置的指针, 即
char * const ps2
, 它所占用的内存在程序运行时被自动分配和释放, 而
p1
占用的内存要等到整个程序结束时才被释放。

#include <stdio.h>
int g; // 存储在全局静态区
int main()
{
char* ps1 = "hello"; // 和g一样
char ps2[] = "hello"; // 堆栈中
printf("%x %x %x", &g, p1, p2);
return 0;
}


你可以看出
ps1
g
的位置距离很近, 而和
ps2
相隔很远, 可以看出他们的确是被存储在不同的内存空间中的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: