27

ポインターアドレスを印刷する場合%dと印刷する場合の違いは何ですか?%u

例えば:

int a = 5;
// check the memory address
printf("memory address = %d\n", &a); // prints "memory address = -12"
printf("memory address = %u\n", &a); // prints "memory address = 65456"
4

5 に答える 5

37

このページでフォーマット エスケープのリストを見つけることができます。

%d%u符号付き整数、 は符号なし整数です。ポインター (数値として扱われる場合) は通常、負ではありません。

実際にポインタを表示したい場合は、%p書式指定子を使用してください。

于 2009-07-21T02:01:02.250 に答える
15

%uは符号なし整数を出力します

%dは符号付き整数を出力します

ポインタ アドレスを取得するには、%pを使用します

その他の書式エスケープのリスト:

書式設定エスケープの完全なリストは次のとおりです。このページのスクリーンショットを提供しているだけです

ここに画像の説明を入力

于 2016-05-16T06:55:13.143 に答える
7

あなたの質問を正しく理解している場合は%p、ポインターが使用しているアドレスを表示する必要があります。たとえば、次のようになります。

int main() {
    int a = 5;
    int *p = &a;
    printf("%d, %u, %p", p, p, p);

    return 0;
}

次のようなものが出力されます。

-1083791044, 3211176252, 0xbf66a93c
于 2009-07-21T02:04:06.990 に答える
1

%u は符号なし整数に使用されます。符号付き整数アドレス演算子 %d によって指定されるメモリ アドレスは -12 であるため、この値を符号なし整数で取得するために、コンパイラはこのアドレスの符号なし整数値を返します。

于 2013-07-10T10:18:24.960 に答える