原帖由 zalem 于 2005-11-3 07:30 发表
struct s* get_s_ptr(int * a_ptr)
{
return (struct s*)((void*)a_ptr-(int)(&((struct s*)0)->a));
}
原帖由 zalem 于 2005-11-3 07:30 发表
struct s* get_s_ptr(int * a_ptr)
{
return (struct s*)((void*)a_ptr-(int)(&((struct s*)0)->a));
}
原帖由 aaaaal 于 2005-11-3 12:35 发表
0是什么意思啊
原帖由 baibai1983 于 2005-11-3 13:19 发表
struct s* get_s_ptr(int * a_ptr)
{
return (struct s*)((void*)a_ptr-(int)(&((struct s*)0)->a));
}
为什么要将a_ptr变为void *,然后还要和一个int来减?
原帖由 雨丝风片 于 2005-11-3 13:34 发表
唉,看来偶得去学学怎么讲故事了。。。
(struct s*)0 :找到尺子,把尺子的一条边卡在头顶上。
((struct s*)0)->a) : 找到眼睛。
(int)(&((struct s*)0)->a)) : 记录下眼睛“看到”的刻 ...
原帖由 zalem 于 2005-11-3 07:30 发表
struct s* get_s_ptr(int * a_ptr)
{
return (struct s*)((void*)a_ptr-(int)(&((struct s*)0)->a));
}
原帖由 whyglinux 于 2005-11-3 16:15 发表
由于 void 是一种不完整类型,所以不要对 void 指针(void*)进行加减运算。因此,程序中的 void* 改为 char* 会更合适些。
原帖由 柳五随风 于 2005-11-3 23:09 发表
呵呵,看过kernel的都明白.
不明白也没有关系.赶紧看.
原帖由 黑苦咖啡 于 2005-11-4 10:23 发表
i = ps - (ps->a);
原帖由 lc1999 于 2005-11-4 11:47 发表
我是楼主.
我的答案是考试时写的.时间很紧,很多细节都错了.
i = ps - (ps->a); 本意是想求出指向结构s的指针和指向成员a的指针的距离.应该是i= (void *)ps-(void *)&(ps->a), duim
谢谢大家关心 ...
原帖由 virmin 于 2005-11-3 16:57 发表
给定一个结构体内某个成员变量的地址,求这个结构体变量的地址
int i = (int)&((struct s*)0->a), 是a变量在结构体内的偏移量,这里巧用了0,0作为结构体首地址,直接得到偏移量,将a_ptr - i就得到了结构 ...
原帖由 karl412 于 2005-11-4 13:44 发表
我开始看的时候太着迷于一个人达人讲的眼睛与头顶的故事了
没有仔细看
...
原帖由 karl412 于 2005-11-4 14:04 发表
将身体结构改为
struct body_struct
{
int head;
int a;
int nose;
};
就看到区别 恢复正常了啊 HOHO~~
要跟你好好学习! 你的故事讲的很好! 不然我眼睛也不会找到头上去呢
至于后面那个问题 怎么 ...
原帖由 雨丝风片 于 2005-11-3 13:17 发表
这就是一个文字游戏。举个例子,你想知道你的眼睛和你的头顶之间的高度差值是
多少该怎么办?(前提是你并不知道它们各自的绝对高度)。你可以找把“L”形的
尺子,尺子的一边卡在你的头顶,另一边沿着你的 ...
原帖由 柳五随风 于 2005-11-3 23:09 发表
呵呵,看过kernel的都明白.
不明白也没有关系.赶紧看.
原帖由 zalem 于 2005-11-4 16:18 发表
该用char*,虽然看着不顺眼...
什么时候认认真真看看C标准...
原帖由 karl412 于 2005-11-4 16:22 发表
kernel就是linux kernel代码啊)
http://www.kernel.org/pub/linux/kernel/
你自己去下载 慢慢看
原帖由 karl412 于 2005-11-4 13:19 发表
#include<stdio.h>
。。。。
int main(void)
{
struct struct_s test[3];
test[0].a = 4;
test[1].a = 5;
test[2].a = 6;
int num = 3;
int *aptr = #
.......
........
printf("the number is:%d\n",((char*)aptr-(int)(&test[0].a)));
........
...
原帖由 yjqyml 于 2005-11-4 16:29 发表
不行。。我还要发问拉(不怕挨批)
该用char* ,虽然看着不顺眼。。 好像还有更深意味呢。。不过没品出来~~
指点下~~
就是char* - int 呢~~
原帖由 雨丝风片 于 2005-11-3 13:17 发表
这就是一个文字游戏。举个例子,你想知道你的眼睛和你的头顶之间的高度差值是
多少该怎么办?(前提是你并不知道它们各自的绝对高度)。你可以找把“L”形的
尺子,尺子的一边卡在你的头顶,另一边沿着你的 ...
原帖由 sickcat2004 于 2005-11-4 17:13 发表
我终于明白料,不容易呀!
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |