文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>一个很好理解结构和指针的例子

一个很好理解结构和指针的例子

时间:2005-11-03  来源:redog

这个方法,我最早见于linux内核0.11版中,第一次碰到就蒙了,现在感觉好多了 呵呵

Given a pointer to member a within a struct, write a routine that returns a pointer to the struct.

struct s
{
...
    int a;

};


struct s* get_s_ptr(int * a_ptr)
{
    return (struct s*)((void*)a_ptr-(int)(&((struct s*)0)->a));
}

struct s* get_s_ptr(int * a_ptr)
{
    return (struct s*)((char*)a_ptr-(int)(&((struct s*)0)->a));
}

原因

按照ANSI(American National Standards Institute)标准,不能对void指针进行算法操作,即下列操作都是不合法的:
void * pvoid;
pvoid++; //ANSI:错误
pvoid += 1; //ANSI:错误
ANSI标准之所以这样认定,是因为它坚持:进行算法操作的指针必须是确定知道其指向数据类型大小的。

还有这里也可以这样些写

struct s* get_s_ptr(int * a_ptr)
{
    return (struct s*)((char*)a_ptr+(int)(&((struct s*)0)->a));
}

这与系统的结构有关系,数据的存储顺序

相关阅读 更多 +
排行榜 更多 +
鸡生化精英安卓版

鸡生化精英安卓版

飞行射击 下载
光头火柴人安卓版

光头火柴人安卓版

飞行射击 下载
轨道射击安卓版

轨道射击安卓版

飞行射击 下载