博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入理解《字符指针与字符数组真正的区别》
阅读量:5232 次
发布时间:2019-06-14

本文共 813 字,大约阅读时间需要 2 分钟。

来自: 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, 

转载于:https://www.cnblogs.com/renrenbinbin/p/4444618.html

你可能感兴趣的文章
SSH框架整合总结
查看>>
图的深度优先遍历
查看>>
C# 之 提高WebService性能大数据量网络传输处理
查看>>
Python面向对象之:三大特性:继承,封装,多态以及类的约束
查看>>
微信小程序实现类似JQuery siblings()的方法
查看>>
md5sum命令详解
查看>>
[bzoj1004] [HNOI2008] Cards
查看>>
使用 Swoole 来加速你的 Laravel 应用
查看>>
TextWatcher原因activity内存泄漏问题
查看>>
Merge into的使用具体解释-你Merge了没有
查看>>
Linux安装程序Anaconda分析
查看>>
如何在chrome上打开SSL3.0
查看>>
应该是实例化对象的没有对属性赋值时,自动赋值为null,但不是空指针对象引用...
查看>>
从网易与淘宝的font-size思考前端设计稿与工作流
查看>>
原生HttpClient详细使用示例
查看>>
几道面试题
查看>>
搜索引擎-SHODAN
查看>>
Factory Design Pattern
查看>>
python中贪婪与非贪婪
查看>>
guava API整理
查看>>