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(内部) のアドレスと(内部)mainのアドレスが異なるようです。thisStructmethod

私は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 に答える