【发布时间】:2010-08-02 12:09:37
【问题描述】:
这是不使用 sizeof 关键字返回结构大小的代码
#include <iostream>
using namespace std;
struct point{
int x;
int y;
};
struct point pt={0,0};
int main(){
point *ppt=&pt;
unsigned char *p1,*p2;
p1=(unsigned char *)ppt;
p2=(unsigned char *)++ppt;
printf("%d",p2-p1);
return 0;
}
据我所知,它返回 8,因为 sizeof char 是 1 个字节,并且此结构首先包含整数类型,它使用 char 指针将其转换为 char 并返回 sizeof char?或者?我不明白它是如何工作的 谢谢
【问题讨论】:
-
正如在这个问题stackoverflow.com/questions/3387021/portability-of-the-code 中指出的那样,代码会导致未定义的行为。
-
@Neil:未定义的行为到底在哪里?我没看到。只要不取消引用结果指针,
++ppt就是合法的。 -
@Fred p2 不是有效指针,原因在我引用的问题中讨论过。
-
@Neil:你读过 5.7 §4 吗? “指向非数组对象的指针与指向长度为 1 且以对象类型作为其元素类型的数组的第一个元素的指针的行为相同”因此获得
&pt+1是合法的只要你不取消引用它。
标签: c++