把0强制转换成指针是什么意思?
经常见把0强制转换成指针的用法,不知道是什么意思?
下面举一下例子:
typedef table* Table;
struct table{
int level;
Table previous;
struct entry{
struct symbol sym;
struct entry *link;
}* buckets[256];
Symbol all;
};
#define HASHSIZE NELEMS(((Table)0)-> buckets);//就是这儿把0 强制转换成table*指针,然后访问table的struct.希望能详细讲一下,这不是一个具体的对象,能访问什么东东?
[解决办法]
获得该对象对于结构体的偏移
例如:
struct A
{
int a;
char b;
short c;
};
(A*)0-> c
就是c成员前面a+b+paddings
[解决办法]
你要把NELEMS也看下去,就会发现,它没有真的访问东西,都是在运算一些编译期就可以确定的东西。
[解决办法]
求偏移
跟这个一样
#define offsetof(s,m) (size_t)&(((s *)0)-> m)
[解决办法]
恩
[解决办法]
编译器确定,不是运行期
[解决办法]
都看《more exceptional c++》了,怎么会对哪些是编译期行为,哪些是运行期行为还完全没概念的呢?