首页 > 编程语言 > 详细

深入理解《字符指针与字符数组真正的区别》

时间:2015-04-21 17:26:27      阅读:224      评论:0      收藏:0      [点我收藏+]

来自: http://blog.csdn.net/on_1y/article/details/13030439 (这篇介绍的非常到位和透彻!!!)

char *p="hello";
char q[]="hello";
char *r = (char*)malloc(sizeof(char)*6);

我们知道,字符指针和字符数组,都可以用来存储和表达字符串。

但,它们的实现方式是不同的! 下面,从代码初始化的角度,来分别说明。

(1)  char *p="hello";

对于p本身,它是一个局部变量,位于 user stack 区域。

p指向的 “hello” 是一个固定的,不可改变的常量,具有静态存储连续性数组类型,C++称它为“string literal”,位于.rodata 区域(位于该区域的数据是read-only)

变量p中存储的是“hello”的首地址

(2) char q[]="hello";

对于q本身,位于 user stack 区域。

q表示的是一个数组,存储的是一个固定不可改变的常量:为数组对应内存空间的首地址。也就是说q是一个指针常量

数组对应的内存单元位于 user stack 区域,在初始化时,编译器计算出数组大小,然后将“hello”中的字符存储到数组中对应的单元。

(3) char *r = (char*)malloc(sizeof(char)*6)

对于r本身,位于 user stack 区域。

r指向的内存单元,位于run-time heap中。 因为malloc、new等在运行时开辟的内存都位于heap中。

 

具体位置如下图。

技术分享

 

并行 VS 并发

未初始化和非法指针。

指针和数组的问题。。。。*p cout is t, p=="tencent" is ok, 

深入理解《字符指针与字符数组真正的区别》

原文:http://www.cnblogs.com/renrenbinbin/p/4444618.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!