趣学 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相隔很远, 可以看出他们的确是被存储在不同的内存空间中的。
相关文章推荐
- Mac OS安装Scrapy
- AGPS定位基本原理浅析
- Android一步一步实现一款实用的Android广告栏
- How to build j2ee application on OpenShift (2)
- 追查网站的思路
- [BZOJ1683][Usaco2005 Nov]City skyline 城市地平线(单调栈)
- 进程相关的数据结构
- C++新特性
- codeforces-158B-Taxi题解
- HDU——1874畅通工程续(Dijkstra与SPFA)
- 设计模式之适配器
- 解决java compiler level does not match the version of the installed java project facet
- 输入人数,录入分数,存到集合里,之后再读取出来,求平均分
- Problem F(数塔)
- PHP实现文件上传与下载
- 轻松安装,自建yum安装源
- Mac OS X系统 HomeBrew的安装和简单使用
- Android之系统Action大全
- 构建BBB内核
- Android版本号对应关系