【发布时间】:2011-10-04 13:03:22
【问题描述】:
我见过很多这样的类型,但我不知道这是什么意思
unsigned char somevar[MAXLEN];
int *ptr = (int *) somevar;
谁能解释一下?
【问题讨论】:
-
这段代码是无效的C,不会做作者期望它做的事情。不要抄袭。
-
@R..:嗯?这是有效的并且具有明确定义的行为。为什么不呢?
-
char *类型的任意指针不一定满足int的对齐要求,并且可能无法忠实地存储在int *中(它的位数可能少于char *)。即使int *可以存储该值,如果不满足对齐要求,当您尝试取消引用指针时行为未定义。最后,还有别名注意事项,其中一种类型是char,这一事实主要缓解了这种情况。 -
@R.. 我不能 100% 确定 C,因为我没有读过标准,不幸的是,但是在 C++ 中,你所有的论点都得到了照顾......
-
@Armen:只有使用
new char[]动态分配的数组才能保证这种方式。堆栈或成员变量没有任何此类保证。 C++0x 中有std::aligned_storage<T>是有原因的。