0

由于各种限制,我有一个只接受int参数的方法。但是,我想将此方法传递给 Struct。

到目前为止,我已经...

main(int argc, char* argv){
    Somestructure * name;
    //Name is malloced, things are put in it, etc.

    int address = (int) &name;
    method(address);
}

void method(int arg){
     Somestructure* thisStruct = (Somestructure*) arg;
     //Do stuff with thisStruct.
}

我认为这将分配thisStruct指向与 main 方法中的 name 相同的结构,但是当我尝试使用thisStructin 时method,我得到一个总线错误。当我使用此代码时...

    int structAddress = (int) &thisStruct;
    printf("[Method] Address : %d\n", structAddress);

似乎name(inside main) 和thisStruct(inside method) 的地址不同。

我对 C 有点陌生,但是,有人知道这里发生了什么吗?

这段代码只能在 32 位系统上运行,所以我不必担心任何 64 位 int/address 问题。

4

2 回答 2

4

您的问题是您传入了&name,它是指向结构指针的指针。因此,在 中method,您正在访问 ,Somestructure **就好像它是Somestructure *.

就进去吧(int)name

(PS 定义“通用参数”的常用方法是使用void *.)

于 2013-02-05T10:13:21.470 回答
3

因为name是 类型Somestructure*,所以该行

int address = (int) &name;

视为. address_ Somestructure**使用

int address = (int)name;

会做你想做的。当然总是假设sizeof(int) == sizeof(Somestructure*)

于 2013-02-05T10:14:19.123 回答