首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

把0强制转换成指针是什么意思?解决思路

2012-04-13 
把0强制转换成指针是什么意思?经常见把0强制转换成指针的用法,不知道是什么意思?下面举一下例子:typedefta

把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++》了,怎么会对哪些是编译期行为,哪些是运行期行为还完全没概念的呢?

热点排行