1

0x102 アドレスに 1 つの整数値があり、#define ABC ...マクロを作成する必要があります。
ABCは変数か何かです(0x102セルにアクセスできます)。
次のような操作を実行できる必要があります。

ABC = 666;  
int x = ABC*2 + 4;  
int *p = &ABC;  

手伝って頂けますか ?

4

5 に答える 5

7

オブジェクトが 16 ビット (アドレス 0x102 は 2 バイトで整列) であると仮定します。

#define ABC  (*(volatile uint16_t *) 0x102)
于 2012-07-13T12:20:35.553 に答える
1

次のように実行できます。

#define ABC *((int*)0x102)

int main() {
  ABC = -1;
  return 0;
}

を設定してint*から、一度にすべてを参照します。

于 2012-07-13T12:20:45.947 に答える
0

これを行うには、コンパイル時マクロを追加します。ABC=(*(int*)0x102)IDE を使用している場合は、プロジェクト設定のプリプロセッサ フィールドに追加できます。または、たとえば CLI コンパイラを使用している場合は、gcc次のようにプログラムをコンパイルできます。

gcc prog.c -DABC=(*(int*)0x102)

または、以下のようにプログラムで直接定義することもできます

#define ABC (*(int *)0x102)

int main()
{
    ABC = 666;  
    int x = ABC*2 + 4;  
    int *p = &ABC;  
    return 0;
}
于 2012-07-13T16:37:27.630 に答える
0

コンパイル時に、コンパイラは #defined 変数を実際の値に置き換えます。

だから、もしあなたが#define ABC

1)ABC = 666; この操作を実行することはできません。

2)int x = ABC*2 + 4; この操作を実行できるようになります

3)int *p = &ABC; この操作を実行することはできません。

于 2012-07-13T12:24:42.567 に答える
0

アドレスを定数として持っている場合は、次のように記述できます。

#define ABC (*(int *)0x102)

そのアドレスに変数がある場合 ( などの名前my_variable):

必要なのは、C++ が参照を呼び出すものです。C では、存在しません。ただし、ご想像のとおり、マクロを使用できます。

この変数が と同じスコープにあるABC場合、必要なのは次のとおりです。

#define ABC my_variable

この変数へのポインターがある場合 (たとえば、関数の引数として)、次のように記述できます。

#define ABC (*that_argument)
于 2012-07-13T12:21:24.293 に答える