cooksa
2015-02-09 06:11
采纳率: 100%
浏览 1.7k
已采纳

C语言字符是左值 为什么可修改

#include
using namespace std;

int main()
{
char c[6] = "hello";

c = "s"; //为什么c是不可被修改的左值
c[2] = 's'; //而c中的元素都可以被修改?

return 0;

}

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

3条回答 默认 最新

  • 91program 2015-02-09 07:12
    已采纳

    数组名是常量型指针,即 const ,当然不能修改;这个与 const 型常量是一样的,定义了就不能修改。

    c 中的元素,是编译器在堆栈上分配的一块内存,当然可以修改。如果你定义 char *p = "hello",则 这 指向一常量区的字符串。你可以试试去修改,如 p[2] 的值看看。结果当然是不能修改。

    打赏 评论
  • Tiger_Zhao 2015-02-09 06:21

    因为 c 虽然可以当作普通的 char* 指针用,但是它指向的是一个固定的数组,这个指针不可以更改。
    本身就是数组,数组成员当然可以赋值了。
    你的理解有问题,普通的
    char* d;
    d = "s"; //这是赋予d一个指向常量字符串的指针,并不是把字符串内容复制到d指向的内存。
    同样
    c = "s";//这是指针赋值而不是内容复制,由于c其实是 const char* 的,指针赋值不起作用。

    打赏 评论
  • wangicter 2015-02-11 08:27

    c是常量型指针,不可修改;但其内容允许修改。

    打赏 评论

相关推荐 更多相似问题