2016-11-18 6 views
-4

との差が、 ものです。例を以下に*(&PTR)および*(PTR)

int main() 
{ 
    int a = 10; 
    int *ptr = &a; 
    printf("%d", ptr); 
    return 0; 
} 

が、私はprintf文の中でそれらを使用する場合、なぜそれが*(&ptr)*(ptr)ための2つの異なる出力を印刷していますか? 同じ出力をptr&ptrに出力すると、なぜ*(ptr)*(&ptr)と等しくないのですか?

+6

それは異なるものだからです。 – jaggedSpire

+0

'&ptr'はポインタ変数自体のアドレスをとります。 –

+0

'&ptr'は' a'のアドレスではありません。 'ptr'のアドレスです。 – melpomene

答えて

0

このコードは、PTRと& PTRに対して同じ出力が印刷されない:

私の知る限り、それは、2つの異なる符号なしlong型(32ビット・ポインタのサイズ)または符号なしlong long値を出力します推測することができるように(64ビット・ポインタのサイズ)と32(64)の差があります。これは、両方ともスタックに割り当てられたデータをターゲットとするためです。

ptrと& ptrを印刷しようとするとそうです。

印刷*(ptr)と*(& ptr)は、それぞれintとポインタ(上記と同様)を出力します。

TL/DR:2つの異なる変数に対して異なるデータが印刷されるのは正常です。

PS:あなたのコンパイラは、%dとしてポインタを印刷できるように誇張されています。

関連する問題