认真学习下字符串和字符数组的区别!

首先: 字符数组 是有单个字符存储构成的数组 字符以ascii形式存储在数组的成员变量中 但是系统不会给字符数组末尾自动加空字符 并且不能通过数组名作为指针常量调用
其次: 字符串 是以空字符结尾的一系列字符 可以使用数组存储 系统自动加空字符 但是一定要留下一个空字符的位置 可以直接通过数组名调用
现在说说 火未燃 的回答错在什么地方 他混淆了字符数组和字符串的概念 概念我们前面说了 很抽象 现在看看声明和初始化
声明并初始化字符数组
char a[5]={'C','h','i','n','a'};
//看到了么 没有空字符的位置 因为我的数组中放字符就5个元素 系统不会主动加\0的  火未燃 说的不对 要想调用也得a[0]来使用C 这种特性和数值数组一样
声明并初始化字符串
char a[6]= "China";
//注意 是a[6]和双引号 因为这是一串字符 所以 最后要留空字符 否则如果你用a[5] 那么系统声明的空间里将没有给\0分配的那一个字节 你调用字符串的时候 系统将直到读到下一个空字符为止 有可能下一个空字符在系统内存的某个地方

最后副送一个知识点 当你用strlen求取字符串a[6]的长度的时候 将得到int 5的返回值 因为strlen函数不算空字符 系统自己加
引用:
问题2:  数组以'\0'为结束符,如果我们自己给数组的最后赋于一个'\0'字符,
问:系统还会默认再给该数组加上一 个'\0'结束符吗?
这个问题你无须关心 取决于你是否多分配了一个给他的空间 空字符无法显示 不可见 用于标志字符串的末尾 使用
char a[6] = "China";  //数组存储字符串
char *p = "China"; //指针存储 注意在在使用前为指针初始化(你现在无须掌握)
puts(a);
puts(p);
打印的都将是China换行
但是如果是这样
char a[5] = "China";
puts(a);
那么将产生无可预料的错误 因为你不知道下一个空字符在哪里 而用指针则没那个问题
系统读到第一个空字符就直接把前面的内容打印
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值