#define A*(int*)「a」の記録について

6700 ワード

define A *(int *)“a”

#define A *("int *")"a"

printf("---test_s: %s
"
, ("a")); printf("---test_d: %d
"
, A); printf("---test_p1: %p
"
, &A); printf("---test_p2: %p
"
, &("a")); printf("---test_p3: %p
"
, (int *)"a");

結果:
---test_s: a
---test_d: 97
---test_p1: 7958A404
---test_p2: 7958A404
---test_p3: 7958A404

解析:簡単で、1番目は文字「a」をそのまま出力し、2番目は文字aのANSIコード:97を出力し、後ろの3つは文字「a」のアドレス0 x 7958 A 404を指します.
もう一度見る

define A *(int *)“aaa”

 #define A *(int *)"aaa" 
 
 printf("---test_s: %s
"
, ("aaa")); printf("---test_d: %d
"
, A); printf("---test_p1: %p
"
, &A); printf("---test_p2: %p
"
, ((int *)"aaa")); printf("---test_p3: %p
"
, &("aaa"));

結果:
---test_s: aaa
---test_d: 6381921
---test_p1: 7B618048
---test_p2: 7B618048
---test_p3: 7B618048

解析:まずaaaは文字列なのでtest_sはそのまま出力され、同様に最後の3つは「aaa」の記憶アドレス0 x 7 B 618048を指す.ただしtest_dの出力結果は6381921であることに注意が必要である.これは、aのANSIコードが97であり、対応するバイナリが0110 0001であるため、aaaが対応するのは「97」「97」「97」であり、対応するバイナリは0110 00010110 00010110 00010110 00001であり、10進数に換算すると6381921である.
 , :

タイプというものは、コンパイラにこのメモリを解析する方法を紹介するものです.(int)「aaa」は、コンパイラにintを解析する方法で「aaa」のヘッダアドレスが指すメモリユニットを解析するように伝えるものです.