【发布时间】:2017-06-30 02:07:36
【问题描述】:
例如,下面的函数是否合法:
struct two_int {
const int a, b;
}
void copy_two(const two_int *src, two_int *dest) {
memcpy(dest, src, sizeof(two_int));
}
似乎至少某些类型的常量定义值的修改是不允许的,但我不清楚这是否符合条件。
如果答案是“一般来说不允许”,我还想知道dest 是用malloc 新分配的内存的特殊情况(因此没有' t 尚未被赋予任何值),例如:
two_int s = {.a = 1, .b = 2};
two_int *d = malloc(sizeof(two_int));
copy_two(&s, d);
更新:对于新的malloc'd 结构的情况,后一个问题似乎得到了肯定的回答(没关系),但原来的、更一般的问题仍然存在,我想。
【问题讨论】:
-
没有。试图在任何地方修改常量变量是未定义的行为。
-
这意味着
two_int不能永远通过malloc或以其他方式动态分配,对吧?由于您无法将任何施工信息传递给malloc... -
这个问题可能符合 [language-lawyer] 标签的条件。
-
不幸的是,链接的问题只涵盖了新的
mallocd 结构的特殊情况,所以它没有回答我最初的问题,即是否允许在它们之上进行memcpy 一般.
标签: c struct initialization constants