5

どうしてこのような整数変数にアドレスを割り当てることができるのでしょうか。コンパイラはエラーを出しません。私はいつも整数値を整数変数に割り当てることしかできませんが

int a=0x28ff1c

char変数についても同じことができます。コンパイラーはエラーを出しません。

char b=0x28ff1c

これは、コンソール画面にcharbのゴミの値とintaのランダムな値を出力します。

cout<<b
    <<endl;
cout<<a;

charbとintaの出力に違いがある理由を誰かが私に説明できますか?char変数とinteger変数にアドレスを割り当てることができる理由を誰かが私に説明できますか?

4

4 に答える 4

8

0x28ff1cはアドレス自体ではなく、単なる16進数です。

以下は同等です。

int a =   2686748;  //decimal number
int a =  0x28ff1c;  //hexadecimal number
int a = 012177434;  //octal number

アドレスはポインタで表されます-それだけの場合は、アドレス、:を使用できvoid*ます

void* p = (void*)0x28ff1c;

その場合

int a = p;

コンパイルされません。pはアドレスですが、番号自体はそうではありません。

于 2012-12-30T13:44:56.433 に答える
5

数値0x28ff1cは、10進数(基数10)の16進数(基数16)表現です2686748cout整数の10進値を印刷するデフォルトとして、それはおそらくあなたが印刷した数です。

の場合char b = 0x28ff1cは少し異なります。

  1. charその値を保持するのに十分な大きさではありません。実際の結果は、に切り捨てられること0x1cです。
  2. coutchar通常はテキストデータを保持するために使用されるため、特別に扱います。したがって、ある種の制御文字であるcoutコードを持つ文字を出力します。たとえば、(ASCIIおよびUTF-8で表す)で0x1c試すことができます。0x41'A'

0x28ff1cまた、住所としてマークするものは何もないことに注意してください。アドレスは&aまたはによって形成され(void*)0x28ff1cます。

于 2012-12-30T13:54:46.143 に答える
1

なぜなら、どのリテラルでも、0xで始まるのは実際には整数だからです。だからそれは許可されています。アドレス整数の場合もあります。

于 2012-12-30T13:45:52.543 に答える
0

@Luchian Grigoreに割り当てて、回答を使用するための*(int *)(Address) = value構成として使用することもできます。valueAddress

于 2012-12-30T14:15:38.520 に答える