このコードを実行すると。
#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 *’
私たちを手伝ってくれますか?
ありがとう
ブラグマン
%p
を使用して、ポインターを印刷します。仕様から:
p
引数はvoid
へのポインタでなければなりません。ポインターの値は、実装定義の方法で、印刷文字のシーケンスに変換されます。
そして、キャストを忘れないでください。
printf("%p\n",(void*)&a);
変数またはポインターのメモリアドレスを印刷する場合、%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;
}
幸運を!
変数のアドレスを出力するには、%p
形式を使用する必要があります。 %d
は符号付き整数用です。例えば:
#include<stdio.h>
void main(void)
{
int a;
printf("Address is %p:",&a);
}
%pを使用しているように見えます: Print Pointers