一条晦涩难懂的C语言语句我在一个函数中看到的struct ylist_head *i;struct ylist_head *n;yaffs_Object *l;...//有这么一条语句l = ylist_entry(i,yaffs_Object,siblings);//其中siblings是结构体yaffs_Object中的成员//这条

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/15 14:51:16
一条晦涩难懂的C语言语句我在一个函数中看到的struct ylist_head *i;struct ylist_head *n;yaffs_Object *l;...//有这么一条语句l = ylist_entry(i,yaffs_Object,siblings);//其中siblings是结构体yaffs_Object中的成员//这条

一条晦涩难懂的C语言语句我在一个函数中看到的struct ylist_head *i;struct ylist_head *n;yaffs_Object *l;...//有这么一条语句l = ylist_entry(i,yaffs_Object,siblings);//其中siblings是结构体yaffs_Object中的成员//这条
一条晦涩难懂的C语言语句
我在一个函数中看到的
struct ylist_head *i;
struct ylist_head *n;
yaffs_Object *l;
...
//有这么一条语句
l = ylist_entry(i,yaffs_Object,siblings);
//其中siblings是结构体yaffs_Object中的成员
//这条语句调用的是一个宏,如下
#define ylist_entry(entry,type,member) \
((type *)((char *)(entry)-(unsigned long)(&((type *)NULL)->member)))
二楼的解释得很好,但还是不太明白,我还想问,为什么要这么做呢?这么做有什么好处呢?为什么不直接将member的地址直接赋给l呢?如:l = &entry->member,希望二楼的在给予解答!

一条晦涩难懂的C语言语句我在一个函数中看到的struct ylist_head *i;struct ylist_head *n;yaffs_Object *l;...//有这么一条语句l = ylist_entry(i,yaffs_Object,siblings);//其中siblings是结构体yaffs_Object中的成员//这条
&((type *)NULL)->member
如果把0看作指向type的指针,那么 type::member的地址是这个
(unsigned long)(&((type *)NULL)->member)
把这个地址转成unsigned long ,因为指向整个对象的指针本身是0,所以这个值实际上就是member 这个成员在结构里的位置偏移量
(char*)(entry)就是为了让它在加减1的时候内存地址实际上也是加减1
(char*)(entry) - (unsigned long)(&((type *)NULL)->member)
就是从entry这个位置减去member的偏移量.
它的意义是:如果entry是指向某个type结构对象的member成员的指针,那么这个结果就是这个结构对象0偏移位置的指针,也就是指向这个对象整体的指针.
外头再加个类型转换就很容易理解了,因为里头算出来的就是指向整个对象的指针,所以也就转换成type*
总的来说,如果 entry是指向某个type类型对象的member成员的指针,这个宏可以求得指向这个对象的指针

一条晦涩难懂的C语言语句我在一个函数中看到的struct ylist_head *i;struct ylist_head *n;yaffs_Object *l;...//有这么一条语句l = ylist_entry(i,yaffs_Object,siblings);//其中siblings是结构体yaffs_Object中的成员//这条 C语言极其晦涩难懂的问题.当0 求两条晦涩难懂的标语一定要晦涩难懂!急用!急用!最好是名言警句. 关于作一圆关于另一圆的反演给定一个圆K,圆U是不经过K的圆u的反演.如何确定圆心U?我看书上写的是:它的圆心O是u的圆心关于K为反演中心的那个反演圆的反演.好晦涩难懂的语言.(我对这句 《查拉图斯特拉如是说》应买哪个版本的?《查拉图斯特拉如是说》具有文学和哲学双重价值 但我又怕德语生硬翻译为中文后看不懂内容 所以请问如果我想要那种翻译后的语言既不晦涩难懂 以下叙述正确的是( ) A.在C程序中,main函数必须位于程序的最前面 B.C程序的每行中只能写一条语句 C.C语言本身没有输入输出语句 D.在对一个C程序进行编译的过程中,可发现注释中的拼写错误 介绍几本所谓的晦涩难懂的书给我吧~想静下心来好好读一读书~ 问大家一个C语言函数参数问题书上有句话是这样的:用数组名作函数参数,应该在糊掉函数和被调函数分别定义数组.我有点懵懂,最好附上简单的语句 c语言环境下编写一个函数,输出语句:I love china!,并在主函数中调用该函数 究竟怎么样才能把一个算法用自然语言通俗易懂地表达出来?好纠结.什么算法用我的话说出来都变得晦涩难懂.过一段时间连我自己都不理解自己的编程思想. 散文中的有哲理的语言不限类型,越长越好,尽量多,一定要有哲理,或者是晦涩难懂每句尽量长 C语言判断输入的是不是“某个”英文字母比如,我输入一个字母,如果这个字母是‘a’就执行下一条语句;如果不是‘a’就反回0? C语言中产生随机数的函数我想要一个1~100的随机数,请告诉我用怎样的语句实现. 晦涩难懂的书籍,电影有哪些?书籍不仅晦涩,思想也要深刻,小说,作品集都行 谁能给我介绍几本股市入门的书籍?不要太晦涩难懂的,我只是入门而已!侧重于短线操作! 最近想看康德哲学,纯粹理性批判 ,有没有哪位看过的 给指点一下 我刚开始看 感觉很晦涩难懂. 富有哲理的语句不要太长,与爱情、生活、兴趣相关,能够发人深省.最好也不要太晦涩难懂,太直白的也不要.例:睡公主的童话故事中,当公主沉睡在城堡中时,城堡的外墙上是玫瑰花的藤蔓 C语言,在for循环中,if…else…是作为一条语句还是多条语句?也就是说,仅有if…else…时需不需要加大括号?if…elseif…else…呢?“推荐答案”只回答了我的第一个疑问,第二种情况和第一种一样吗?