字符串和字符数组
字符数组初始化
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中。
也就是说字符数组自己存那些字符;字符串一定需要额外的内存来存那些字符,字符串只存那些字符所在内存空间的首地址。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具