字符串和字符数组

字符数组初始化

char a[] = "linux";
char a[] = {'l', 'i', 'n', 'u', 'x', '\0'};
以上两种方式等价,定义数组a,占6字节,右值"linux"只存在于编译器中,编译器将它用来初始化字符数组a后丢弃掉(也就是说内存中是没有"linux"这个字符串的)
char a[64] = {0};
char a[64] = {'\0'};
以上两种方法等价,将字符数组a初始化为空字符串(必须写明数组大小)

字符串

char *p = "linux";
定义一个字符指针p,p占4字节,分配在栈上;同时还定义了一个字符串"linux",分配在常量区;然后把字符串常量的首地址(也就是'l'的地址)赋值给p。

字符数组与字符串的本质差异:

字符数组本身是数组,数组自身自带内存空间,可以用来存东西(所以数组类似于容器);而字符串本身是指针,本身永远只占4字节,不能用来存数据,所以只能把数据存到别的地方,然后把首地址存在p中。

也就是说字符数组自己存那些字符;字符串一定需要额外的内存来存那些字符,字符串只存那些字符所在内存空间的首地址。

posted @   jason8826  阅读(79)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示