开发平台(Platform): (Ex: Win10, Linux, ...)
None.
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
None.
问题(Question):
当结构中有阵列,如:
typedef struct {
uint8_t data[4];
} DATA_AREA;
typedef struct {
DATA_AREA row1;
DATA_AREA row2;
} FRAME;
如果将一个Frame变量赋值给另外一个Frame变量,如:
FRAME a, b;
...
b=a;
阵列内的值会被复制吗?
喂入的资料(Input):
如下完整程式码
预期的正确结果(Expected Output):
None
错误结果(Wrong Output):
None
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
typedef struct {
uint8_t data[4];
} DATA_AREA;
typedef struct {
DATA_AREA row1;
DATA_AREA row2;
} FRAME;
int main(int argc, char* args[]) {
FRAME a, b;
strcpy(a.row1.data, "abc");
strcpy(a.row2.data, "XYZ");
b = a;
printf("a:%s,%s\n", a.row1.data, a.row2.data);
printf("b:%s,%s\n", b.row1.data, b.row2.data);
strcpy(a.row1.data, "xyz");
strcpy(a.row2.data, "ABC");
printf("a:%s,%s\n", a.row1.data, a.row2.data);
printf("b:%s,%s\n", b.row1.data, b.row2.data);
printf("%0X ... %0X\n", &a.row1.data, &a.row2.data);
printf("%0X ... %0X\n", &b.row1.data, &b.row2.data);
}
补充说明(Supplement):
上面的code其实已经实验完了,阵列中的资料确实会被复制过去,我一直把
阵列想像成只是一个不记忆长度的空间起始位置(就像指标那样),这样看起
来实际阵列知道自己的长度,可是这个长度是存在哪里呢?
顺带一提如果把阵列换成uint8_t*然后在main里用malloc分配空间并执行相
同实验,实际上a跟b的rowX.data会是同样的位置,表示它复制的是指标内
容。