问大家一个简单的问题啊.也不知我是不是钻牛角尖.

haozlee 2006-09-03 07:14:58
大家先看下这两个有什么不同:

char s[10]="abcd";


char s[10];
s="abcd";




我先讲下第二个我的理解:
先定义一个字符数组,然后试图用字符串"abcd"对其进行初始化,即是试图将"abcd"第一个元素的地址赋给s,而s是个数组名,可看成是数组的地址,是个常量,不能再赋值,所以就出错了.

我现在想问下大家的是,那第一个的"abcd"是不是也表示地址?难道也用"abcd"的地址对其赋值?大家可以详细说下,第一个到底是怎样对s数组进行初始化的吗?第一个的初始化如果分两个语句来写,可以吗?
...全文
330 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
pony_ml 2006-09-15
  • 打赏
  • 举报
回复
那楼上的看下这个:
char *s;
s="abcd";

那"abcd"还有没有地址啊?
//////////////////////////////////////////////////////
想问一下,向上面那样对s赋值安全么,如果安全,s指向什么样的地址呢?
guolitie 2006-09-14
  • 打赏
  • 举报
回复
又学到东西了
BlueWhite0722 2006-09-14
  • 打赏
  • 举报
回复
呵呵明白很多谢谢
xyxfly 2006-09-03
  • 打赏
  • 举报
回复
^_^
haozlee 2006-09-03
  • 打赏
  • 举报
回复
非常感谢上面几位,我想我明白了很多.
jixingzhong 2006-09-03
  • 打赏
  • 举报
回复
char s[10]="abcd";
// 这个是定义一个字符数组,然后用 "abcd" 去初始化这个数组,
// 操作的结果是s[0]='a', s[1]='b', s[2]='c', s[3]='d', s[4]='\0', s[5]~s[9] = 0;
// 注意 char s[10]="abcd"; 初始化了 5 个字符,因为字符串隐含一个末尾终结符
// 后面的 5-9 元素是初始化操作时候,自动将未初始化单元赋值为 0

区别 char *s = "abcd" ;
这样的话 "abcd" 是代表 "abcd" 这个字符串的首地址,
该语句定义并初始化指针 s 指向 "abcd" 这个常量字符串。
所以 ,
char s[10];
s="abcd"; 也是一样,
由于 数组名字是不允许赋值修改的(不能为左值), 这样将引发错误。
jixingzhong 2006-09-03
  • 打赏
  • 举报
回复
我现在想问下大家的是,那第一个的"abcd"是不是也表示地址?难道也用"abcd"的地址对其赋值?大家可以详细说下,第一个到底是怎样对s数组进行初始化的吗?第一个的初始化如果分两个语句来写,可以吗?
========
第一个不是。
  • 打赏
  • 举报
回复
char s[10];
s="abcd";//"abcd"作为一个常量存放在常量区或在编译器进行优化时被优化掉了,运行时内存中根本就没有它的地址。


char s[10]="abcd";//它的意思是定义并赋初值。
相当于:
char s[10];
s[0] = 'a';
s[1] = 'b';
s[2] = 'c';
s[3] = 'd';
muchina450 2006-09-03
  • 打赏
  • 举报
回复
使用指针*s赋值是对第一个元素的初始化,及s表 示'a',指高字符a
haozlee 2006-09-03
  • 打赏
  • 举报
回复
那楼上的看下这个:
char *s;
s="abcd";

那"abcd"还有没有地址啊?
medie2005 2006-09-03
  • 打赏
  • 举报
回复
"即是试图将"abcd"第一个元素的地址赋给s,而s是个数组名,可看成是数组的地址,是个常量,不能再赋值,所以就出错了."

a有地址?
我认为是没有的,有也是临时地址而已。
char s[10]="abcd";的工作过程应该是:系统分配10*sizeof(char)的空间,并对前四个元素赋值a,b,c,d.




飞哥 2006-09-03
  • 打赏
  • 举报
回复
数组只有在定义时可以用等号初始化
其他时候只能用strcpy之类的了

name是常量哦
不能赋值

yiqing8854 2006-09-03
  • 打赏
  • 举报
回复
你的第二句,如果在前面定义了字符S的话,就是将A的地址赋给它,我估计你的想法肯定得不到结果。
char c[10] = {"abcd"};

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧