0
struct big{
struct small;
}
struct small{
int a;
int b;
}
如果我在指针传递到大,并尝试用如何访问SPARC中结构中包含的结构中的元素?
ld [%i0], %l0
访问结构大,那么如何访问变量? 我可以使用
ld [%l0 + OFFSET], %l0
要得到它吗?看起来这会导致段错误。
struct big{
struct small;
}
struct small{
int a;
int b;
}
如果我在指针传递到大,并尝试用如何访问SPARC中结构中包含的结构中的元素?
ld [%i0], %l0
访问结构大,那么如何访问变量? 我可以使用
ld [%l0 + OFFSET], %l0
要得到它吗?看起来这会导致段错误。
当你传入一个指向struct big的指针时,它指向的第一件事就是big.small.a,所以在第一条ld指令后,你已经获得了big.small.a的值%10。如果您尝试以指针的形式再次解除引用,那么出现段错误并不奇怪。所以基本上我在说的是:
ld [%i0], %l0 /* gives big.small.a */
ld [%i0+4], %l0 /* gives big.small.b */
您不能访问程序集中的任何一个结构体,只能访问组成结构体的字节,半字和单词。所以你需要弄清楚这些东西有多小,然后它们有多大。 –
我不知道你用什么汇编器。 struct small(里面的大)不是一个指针。如果你解除引用l0,你就着陆了* a,我认为这不是你想要的。不要像小指针那样小引用 – Tommylee2k
“big”真的只是向前定义了struct small的存在吗,还是你忘记了在那里放置成员变量名,比如'struct big {struct small s; }'?所以'大B; b.s.a = 1;'应该可以吗?如果是这样的话,那么'big'和'small'结构实际上是相同的东西,如果你的代码接收到指向big或者small的指针并不重要,它可以操作'a'和' b'以同样的方式。 (除非你将虚函数添加到'big',那么'.sa'和'.sb' * MAY *可以具有与'small'结构中的'.a'和'.b'不同的偏移量,没有虚拟)。 – Ped7g