A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

char name[3]={10,11,13};这是一个字符数组。可是char name[]={'a','n'};就是一个字符串数字了吗。那char name[2]={'a','n'}就只是一个字符数组了吗。他们在用法上有什么区别。只是能不能用strlen函数吗?请大神回答疑难杂症!

8 个回复

倒序浏览
应该是字符数组和字符串的区别吧?
回复 使用道具 举报
字符数组可以在运行时改变数组长度,而且可以不以'\0'结尾,但是字符串在初始化以后不能改变其长度且必须以'\0'结尾。
回复 使用道具 举报
字符串数组是由字符串组成的数组,里面其实都是指针,字符数组里面当然都是字符了。不过看你描述的问题似乎不是要问这个,你定义的3个name都是数组,其实只要是连续存放在内存中的字符都是字符串,所以那3个name也是字符串,strlen(name)也是正确的,不过返回的值很可能大于数组长度,因为strlen在计算字符串长度是以'\0'结束的。只要是char*类型的指针都可以用strlen来计算长度。常见的字符串定义是指针的形式:
char  *c = "asd"; //c指向的是字符串常量,里面包含4个字符'a''b''c''\0'
char s[10]={'a','s','d'}; //这是个数组,但也是字符串,里面包含'a''b''c'和7个'\0',因此strlen(s)=3
数组其实很好理解,有[]就是数组,之所以字符数组也是字符串是个巧合,它们里面都放的是字符,如果是int数组就不会出现这样的情况了
回复 使用道具 举报
bansy_chen 发表于 2015-3-27 23:33
字符数组可以在运行时改变数组长度,而且可以不以'\0'结尾,但是字符串在初始化以后不能改变其长度且必须以 ...

。。额。。我又混乱了。。那 char name[]="good"这个good是可以随时改的把。。他的存储就是'g','o'',o','d'.是存储在栈中得局部变量吧。。。这个应该也是字符串数组把:'(
回复 使用道具 举报
hellooc 发表于 2015-3-28 02:45
字符串数组是由字符串组成的数组,里面其实都是指针,字符数组里面当然都是字符了。不过看你描述的问题似乎 ...

很详细!这么看大抵明白了!!感谢大神!!
回复 使用道具 举报
字符串还是字符,只不过多了一个'\0'
回复 使用道具 举报
字符串好难,搞不清楚呀,要加紧去学习
回复 使用道具 举报
chensc 金牌黑马 2015-3-28 10:38:51
9#
学习学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马