-5
#include<stdio.h>
void main()
{
  int *c=12345;
  printf("dec:%d  hex:%x", c ,&c); // (1)
 }

行(1)が印刷されます

dec:12345  hex:8af123

where8af123は明らかにランダムでマシンに依存するアドレスです。

入れたら

printf("dec:%d", *c); // (1)

明らかに失敗します。

だから私の質問は理論的な概念によるものです:

  • *c値を保持する必要があります12345が、そうではありません。なぜ?

そして、このコードでは:

#include<stdio.h>  
void main()  
{  
  char *c='a';  
  printf("address store in c:%d  value point by c:%c address of c:%x", c,*c ,&c); //Focus line  
}  

出力は次のとおりです。

adderess store in c:9105699 value point by c:a address of c:8af564
  • *c代わりに'a' を格納するのはなぜcですか?

gcc コンパイラ 4.4.3 を使用しています。

4

2 に答える 2

11
int *c=12345;

(おそらく) 無効な address を指すポインターを作成しました12345

cに(no *) を渡すprintfと、ポインター自体が渡されます。したがって、printf単に数字12345を見て、それを出力します。それがポインターであることを知る方法はありません。

*c、 toを渡す場合、ポインタを逆参照しています – メモリ アドレス で値を渡してprintfます。 これは有効なアドレスではないため、逆参照操作は に到達する前にクラッシュします (正確には、未定義の動作になります) 。12345
printf

于 2013-05-21T13:36:48.607 に答える