3

この行が何をするのか理解できません:

((struct Example*) 0x10000)

私はテストプログラムを書きました:

#include <stdio.h>

struct Elf{
    int bla;
    char bla2;
};

int main(){
    struct Elf *elfPtr;
    printf("Before casting: %p\n", elfPtr);
 
    elfPtr = ((struct Elf *)0x10000);
    printf("After casting: %p\n", elfPtr);
 
    return 0;
}

出力は次のとおりです。

キャスト前: 0xb776dff4

キャスト後:0x10000

この行はこれだけですか?

elfPtr = 0x10000
4

4 に答える 4

2

通常、ポインタに任意の値を代入することは悪い考えです。そのため、コンパイラはそれを思いとどまらせ、キャストを追加して、自分が何をしているのかを知っていることをコンパイラに安心させる必要があります。

(コードはアドレス 0x10000 のメモリをstruct Elfインスタンスとして扱いますが、少なくとも単純な例ではそうではありません。読み取りおよび/または書き込み可能なメモリでさえない可能性があるため、しようとするとクラッシュしますアクセスしてください。)

于 2013-09-29T12:05:14.653 に答える