将 char 存储在 char 数组中 - 将 char 赋值给 char[] 时类型不兼容

问题描述 投票:0回答:1

我有一个带有 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 中?另外,空终止符是怎么进来的?

c++ arrays char dereference
1个回答
0
投票

如果有人可以解释两者之间的区别。

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'

© www.soinside.com 2019 - 2024. All rights reserved.