web-dev-qa-db-ja.com

Cで変数アドレスを印刷する方法は?

このコードを実行すると。

#include <stdio.h>

void moo(int a, int *b);

int main()
{
    int x;
    int *y;

    x = 1;
    y = &x;

    printf("Address of x = %d, value of x = %d\n", &x, x);
    printf("Address of y = &d, value of y = %d, value of *y = %d\n", &y, y, *y);
    moo(9, y);
}

void moo(int a, int *b)
{
    printf("Address of a = %d, value of a = %d\n", &a, a);
    printf("Address of b = %d, value of b = %d, value of *b = %d\n", &b, b, *b);
}

コンパイラでこのエラーが発生し続けます。

/Volumes/MY USB/C Programming/Practice/addresses.c:16: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
/Volumes/MY USB/C Programming/Practice/addresses.c:17: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int **’
/Volumes/MY USB/C Programming/Practice/addresses.c:17: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘int *’
/Volumes/MY USB/C Programming/Practice/addresses.c: In function ‘moo’:
/Volumes/MY USB/C Programming/Practice/addresses.c:23: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
/Volumes/MY USB/C Programming/Practice/addresses.c:24: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int **’
/Volumes/MY USB/C Programming/Practice/addresses.c:24: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘int *’

私たちを手伝ってくれますか?

ありがとう

ブラグマン

42
nambvarun

%pを使用して、ポインターを印刷します。仕様から:

p引数はvoidへのポインタでなければなりません。ポインターの値は、実装定義の方法で、印刷文字のシーケンスに変換されます。

そして、キャストを忘れないでください。

printf("%p\n",(void*)&a);
84
Carl Norum

変数またはポインターのメモリアドレスを印刷する場合、%dを使用してもジョブは実行されず、アドレスの代わりに数字を出力しようとするため、コンパイルエラーが発生します。メモリアドレスが数字ではないため、機能する場合でも意図的なエラーが発生します。値0xbfc0d878は確かに数字ではなくアドレスです。

使用すべきは%pです。例えば。、

#include<stdio.h>

int main(void) {

    int a;
    a = 5;
    printf("The memory address of a is: %p\n", (void*) &a);
    return 0;
}

幸運を!

6
Ron Nuni

変数のアドレスを出力するには、%p形式を使用する必要があります。 %dは符号付き整数用です。例えば:

#include<stdio.h>

void main(void)
{
  int a;

  printf("Address is %p:",&a);
}
1
Amarendra Deo

%pを使用しているように見えます: Print Pointers

0
skaz