tangzhence
2014-11-24 09:37
采纳率: 100%
浏览 2.3k
已采纳

c语言中字符数组初始化问题

字符数组初始化
1:
char str[]="123";//不报错
2:
char str[4];
str="123";//不能将const char[4] to char[4]
字符指针初始化
1:
char *str="123";//不报错
2:
char *str;
str="123";//不报错
求大神解释这是为什么

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 秋之菌 2014-11-26 03:12
    已采纳

    我来解释一下:
    数组初始化
    1、char str[]="123";//不报错
    原因是,这样的写法,实际上str是一个指针变量,str指向了“123”数据段。
    等效于char *str="123";
    char *str;
    str="123";
    这个很好理解了,对一个指针变量赋“123”数据段的首地址。
    2、char str[4];
    str="123";//不能将const char[4] to char[4]字符指针初始化
    这个是错误的,表面上的意义是str是一个数组,str变量则是这个数组的首地址,等效于&str[0],因此这样赋值是非法的。

    已采纳该答案
    打赏 评论
  • qqlindexi 2014-11-24 09:51

    123是内存里而char *str是指针,指向。char str[]=?是初始化,这样编译 for(i=0;i<string.length;i++)str[i]=string[i]
    char str[4],str已经固定不能变,他是const,str是const不能指向别char char *str是指针可以到内存123

    打赏 评论
  • threenewbee 2014-11-24 09:51

    你知道123正好是4个字符,能装在str[4]中,编译器并不知道这一点。它统统不让定义了长度的数组接受一个字符串。

    打赏 评论
  • 91program 2014-11-24 10:03

    char str[4];
    str="123";//不能将const char[4] to char[4] 是因为 str 被认为是常量型指针,所以不能修改它。
    字符指针初始化

    打赏 评论

相关推荐 更多相似问题