我有一个带有 char 数组成员的结构:
typedef struct {
// ...
char myCharArr[200];
} myStruct;
我有这些结构的动态数组。当我尝试在
myCharArray
中存储字符时,它显示错误消息 incompatible types in assignment of 'char' to 'char[200]'
int num = 2;
myStruct* data = new myStruct[num];
// ...
data[i].myCharArr = 'a'; // error here
但是如果我使用下面的行,它就可以正常工作
*data[i].myCharArr = 'a';
一段时间后我又回到了 C++,所以如果有人能解释两者之间的区别,我将非常感激。根据我的理解和记忆,我可以使用
strcpy
和其他变体将写入字符串存储到字符数组中,但在本例中它是单个字符。为什么取消引用数组可以将 char 存储到 chararray 中?另外,空终止符是怎么进来的?
如果有人可以解释两者之间的区别。
data[i].myCharArr
为我们提供了数据成员 myCharArr
,它是数组类型 char[200]
,并且您试图向它分配 char
,这是不可能的。请注意,c 样式数组也会衰减为指针(此处 char*
)。
另一方面,当你将
operator*
应用到*data[i].myCharArr
时,就相当于写:
*(data[i].myCharArr) //same as data[i].myCharArr;
由于 运算符优先级。
这次,我们仍然从
char[200]
得到一个 data[i].myCharArr
,但它衰减 为 char
指针。然后 operator*
取消引用该指针并给我们一个 char
,可以将其赋值为 'a'
。