c语言数组赋值问题

 我来答
灵冻冰晶霜月
2018-03-28 · 超过47用户采纳过TA的回答
知道小有建树答主
回答量:90
采纳率:90%
帮助的人:21.1万
展开全部
我不清楚你想问什么,不过第二种写法是对的。
char chars[11];//是定义了一个初始值为空总数为11的字符数组。
char s[] = "c language";//定义一个总数为11的字符数组,但是有初值。注意是11个不是10个,用这种方定义的字符数组末尾会加一个\0。
数组的赋值通常是使用花括号来表示的,但是字符数组比较特殊,它可以使用字符串来赋值,当然你也可以使用通用的方式,用花括号来赋值,如{'c', ' ', 'l', 'a'.....}。
更多追问追答
追问
先定义,再赋值,s[11]地址越界,但是要是s[]给他赋值为什么也是错呢
追答
首先如果在定义的时候赋值的话是没有问题的。但是如果你想在定义之后再赋值就会有问题了如:
char a[];
a="c language";//错误的
首先你要搞清楚char a[]和"c language"的本质,a是一个数组,但是a这个字母又可以当做这个数组的地址和第一个同时它又是第一个成员的地址,即a=数组首地址=a[0]的地址,这就是为什么pringtf仅凭一个a就可以显示字符串。但是注意:它的地址是不可修改的。
第二,你要知道双引号的含义,双引号在程序处理时会被分成三个步骤,1.分配空间,2.装载内容并返回指针,3.在末尾加入'\0'。
现在来看看问题,如我举的例子,a="c language";就如同是将a的地址改成后面字符串的地址,这很明显是行不通的。而通过这个功能提示很明显可以想到要用指针如:
char *a;
a="c language";//这是正确的
为什么指针a在没有分配空间的情况下就可以使用呢?因为a="c language"这一步不是在a对应的空间写入内容,而是将后面字符串的地址赋值给指针a,所以这样的方式是正确的。
第三,如果你使用的是char a[11];让后想给它赋值,甚至是做更多的操作,那么你需要使用"string.h"头文件中的函数来实现或是一个一个赋值(如果你不嫌麻烦)。注意只有char a; char a[数字]; char *a; 这样的形式,没有char a[];这种的(这种形式通常用于定义时赋初值的情况,这样你可以不用去数字符串的字符个数)。
字符串的使用一定要用“string.h”中的函数来处理,它不像其他的变量可以随处赋值。当然指针其实是一个很不错的选择,不管是在赋值上,在交换字符串,连接字符串等简单操作上都是十分方便的,但是由于指针的灵活性(这货太灵活甚至没有什么可以规范它),所以经常会出错,如空指针,野指针,越界,还有极富盛名的“烫烫烫烫烫烫烫烫”。
fox000002
2018-03-28 · TA获得超过3823个赞
知道大有可为答主
回答量:2356
采纳率:97%
帮助的人:1144万
展开全部

需要注意初始化和赋值的概念,数组初始化时语法允许使用初始值进行初始化。

声明后使用时不允许初始化的语法。

char s[11] = "c language"; // 声明的同时进行初始化

C语言中字符数组的初始化与赋值

追问
请问为什么定义后不能赋值,这种规定没有理由吗
s[11]是错的越界,但是要是s[]给他赋值为什么错呢
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
coolfainter
2018-03-29 · TA获得超过354个赞
知道小有建树答主
回答量:229
采纳率:100%
帮助的人:232万
展开全部
数组的下界是一个在写代码的时候需要注意的问题,和普通数学不同的是,数组的下标是从0开始的,给初学者带来一定困扰。
其实按照上述例子和在开发中的实际,a[5],a[6]也是可以访问的,只是在a[0]的基础上不停的向后增加4个字节后,将后面存储空间中的内容按照int的格式取出,至于里面存放的是什么内容则是比较难以预测的,这个叫做数组越界。
c语言的编译器在实现时,进行的检查机制其实不多,更多的是要求程序员在规则之内做一些事情,而不是将所有的问题交给编译器去处理,使用数组不应越界是一个约定俗成的东西。
初学者很容易在这一点上犯错误,也由于c语言比较接近底层,所以自身的检查机制较少,所以以后多加注意即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式