首页 > 试题广场 >

考虑下面的联合声明: 1 union ele { 2&nb

[问答题]

考虑下面的联合声明:

1 union ele {
2    struct {
3       long *p;
4       long y;
5     }e1;
6    struct [
7        long x;
8        union ele *next;
9     } e2;
10 };
这个声明说明联合中可以嵌套结构。
下面的函数(省略了一些表达式)对一个链表进行操作,链表是以上述联合作为元素的:
1 void proc (union ele *up) {
2 up-> () = *()-();
3 }
A. 下列字段的偏移量是多少(以字节为单位):
el .p ()
el. y  ()      
e2.x ()
e2.next ()

B. 这个结构总共需要多少个字节?

C. 编译器为proc产生下面的汇编代码:
proc:
  movq 8(%rdi),%rax
  movq (%rax),%rdx
  movq (%rax),%rdx
  subq 8(%rax),%rdx
  movq %rdx,(%rdi)
  ret

在这些信息的基础上,填写proc代码中缺失的表达式。提示:有些联合引用的解释可以有歧义。当你清楚引用指引到哪里的时候,就能够澄清这些歧义。只有一个答案,不需要进行强制类型转换,且不违反任何类型限制。


这道题你会答吗?花几分钟告诉大家答案吧!