C语言字符串赋值操作

C、D选项是初始化列表的形式吧,是不是初始化列表不属于赋值呢?B\C\D都是把“ABCD"的首地址赋给了一个值吧... C、D选项是初始化列表的形式吧,是不是初始化列表不属于赋值呢?B\C\D都是把“ABCD"的首地址赋给了一个值吧 展开
 我来答
明阿哩05
2012-08-29 · TA获得超过268个赞
知道答主
回答量:417
采纳率:0%
帮助的人:261万
展开全部
首先要弄清楚 什么是 字符串指针,还有什么叫字符数组。

字符串指针只是一个指针,就像你上面 的 A 里面的 s 没有初始化,那么你调用读串 函数 数据要写到哪里呢? 不知道吧 ,因 为s 不知道 指向哪里。

char *s; s="ABCDEF"; 这又是什么意思呢? 这个操作 是将一个 串("ABCDEF" 在内存中已经存在了),只是将这个串的首地址 赋给 s ,也就是让 s 指向 这个串。你可以把这个串理解成 在编译时期就已经确定好了的数据。我们可以用它。但不能更改他的值。

什么叫 字符数组呢? 首先要弄清楚 什么叫 数组 ,如 int array[4]={1,2,3,4}; 这是什么意思呢?
就是 四个连续的整数 吧。 同样 字符数组也 是 连续的 N个字符吧 如 char arr[3]={'A','B','C'};
这是一个数组 ,有三个元素,分别是 A B C ,看起来“好像”字符串呀,为什么是 “好像”,因为它与字符串 有着本质的区别。字符串 是 N 个连续的字符 +‘\0’ 组成, 我们上面的 例子只有 N个连续的字符,没有 ‘\0’ 吧。所以它不是字符串。 为了使用方便 呢,编译器允许我们 使用如下方式初始化一个字符串。
1:char *s="abcdef";
2:char ss[10]="abcd";
3:char sss[10]={"kkkk"};

上面三种方式 都是正确的,但是 有区别。
1: 上面已经讲了,是将已经存在于内存中的字符串的首地址 赋值给 s
2: 这是将已经存在于内存中的字符串 拷贝到ss 这个数组里面,是一个拷贝 过程,产生的影响是系统中存在两个 相同的字符串。
3:同2
AutoGrowUP
2012-08-29
知道答主
回答量:30
采纳率:0%
帮助的人:15.1万
展开全部
B是先申请了一个字符串指针,之后把它指向了”ABCD“的首地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ifeiying
2012-08-29 · TA获得超过230个赞
知道小有建树答主
回答量:253
采纳率:100%
帮助的人:146万
展开全部
字符串是用'\0'作为结束符的,C的话空间不够,因为加上'\0'就应该要6的空间;
D的话没有存储'\0',只能说是5个字符,不算一个字符串。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式