Ale*_*nnk 5 c++ arrays string char
char arr[3];
arr="hi";// ERROR
cin>>arr;// and at runtime I type hi, which works fine.
Run Code Online (Sandbox Code Playgroud)
1)有人可以向我解释原因吗?
2)什么是"hi"的类型,我知道它叫做文字字符串.但它只是一系列的字符吗?
3)不是cin >> arr; 就像在运行时键入arr一样?
C++中的数组不是实际类型,只是一系列值的结构化表示,而不是指针,如果你应该在任何地方找到它们(它们会衰减成指针).您不能像使用其他类型一样使用它们,包括分配.选择是为数组添加大量支持,或者尽可能简单快速地保持它们.选择了后者,这是C++与其他语言的区别之一.
要复制数组,请一次复制一个元素.
在C++ 11中,有一个STL容器std::array.它被设计成适合作为运算符重载的普通数组,以及与STL的其余部分相关.
更好的选择是std::string.它结合了您想要的行为和更多,并专门用于保存字符数组.
正如康拉德鲁道夫指出的那样,"嗨"是一个const char [3].
至于cin原始数组,通过标准方法是不可能的,因为没有为cin数组提供过载.虽然可以创建自己的重载.但是,我不确定如何解释传递的不同大小的数组,除非您为知道其大小而不是原始数组的容器定义它.
如果您愿意,可以声明:
char array[] = "hi!";
Run Code Online (Sandbox Code Playgroud)
创建一个数组并将其"初始化"为4个字节,"嗨!"
char const *array2 = "hey!";
Run Code Online (Sandbox Code Playgroud)
创建一个指向只读内存的指针,一个字符串文字
array2 = array;
Run Code Online (Sandbox Code Playgroud)
您现在可以使用array2指针访问第一个数组.这称为指针衰减; array和array2的类型不同,即使它们可以在这里合作.char类型的数组 "衰减"到char类型的指针.
array = array2; // ERROR
Run Code Online (Sandbox Code Playgroud)
数组不是指针.你认为数组是一个指针,实际上,它是预先分配的.您正在尝试分配地址,但array []在创建时已经有一个"硬编码",并且无法更改.