char arr[3];
arr="hi";// ERROR
cin>>arr;// and at runtime I type hi, which works fine.
1) 有人能解释一下为什么吗?
2) “hi”到底是什么类型? 我知道它被称为字面字符串。但它只是字符数组吗?
3) cin>>arr;不就像将arr赋值为你在运行时键入的内容吗?
如果您愿意,您可以声明:
char array[] = "hi!";
char const *array2 = "hey!";
array2 = array;
现在,您可以使用array2指针来访问array one。这称为指针衰减;虽然它们可以在这里合作,但array和array2不是相同类型的数组。类型为char的数组“衰减”为类型为char的指针。
array = array2; // ERROR
数组不是指针。你可能认为数组就像指针一样,但实际上,它是预先分配的。你试图分配一个地址,但当数组[]被创建时,它已经有了一个“硬编码”的地址,并且不能被改变。
std::string
。 - Cornstalksconst char*
,而是一个const char[3]
。否则你就无法用它来初始化一个数组。 - Konrad Rudolphchar[]
的赋值操作会复制数组,因此没有问题。对char*
的赋值在技术上是无效的,但是为了向后兼容性(C 允许这样做),C++ 允许这样做。但是现代编译器应该会对这段代码发出警告(至少所有可以配置的编译器都可以这样做),而且据我所知,在 C++11 中完全禁止这样做。 - Konrad Rudolph