char*p 与 char p[]的区别

const char *p="Hello World";
char p1[]="Hello world";

从内存的角度来理解其区别:
const char* p是一个指针,根本没有涉及到内存分配,它指向的"Hello World"是只读的,若试图去给它赋值必然发生错误。这里的"Hello World"是字符串常量存储在文字常量区中,是只读的,const char*p 只是提供了一个指向该内存的指针。
而char p1[]是一个数组,它在堆栈中已经分配好内存,将"Hello World"复制到该内存块中。

但总的来说,"Hello World"总是存储在文字常量区,而这两种方式定义的p和p1都是在堆栈中。

const char *p="Hello World";

该语句会在堆栈中先分配一个4字节(32位系统)的指针指向"Hello World"区域。

char p1[]="Hello world";

该语句首先在堆栈上分配一个12个字节的char数组,然后将常量储存区的"Hello World"复制过来。

全部评论

相关推荐

11-09 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务