80

かなりシンプルに見えることをしたいです。結果は得られますが、問題は、結果が正しいかどうかを知る方法がないことです。

私はCで作業しており、2つのポインターがあります。ポインタの内容を印刷したい。ポインターを逆参照してポイントされた値を取得するのではなく、ポインターが格納しているアドレスが必要です。

私は次のコードを書きました。私が知る必要があるのは、それが正しいかどうか、そうでない場合はどうすれば修正できるかということです。

/* item one is a parameter and it comes in as: const void* item1   */
const Emp* emp1 = (const Emp*) item1; 

printf("\n comp1-> emp1 = %p; item1 = %p \n", emp1, item1 );

私がこれを投稿している間(そしてそれが正しいことが重要である理由)は、私が最終的にポインターからポインターへのこれを行う必要があるということです。あれは:

const Emp** emp1 = (const Emp**) item1; 
4

6 に答える 6

40

ポインタ内のアドレスをポインタに出力するには:

printf("%p",emp1)

一度逆参照して2番目のアドレスを出力するには:

printf("%p",*emp1)

dddLinuxを使用してメモリを表示している場合、または単にメモリを表示している場合は、デバッガでいつでも確認できますgdb。メモリアドレスが表示されるので、ポインタの値と比較できます。

于 2009-06-28T22:53:28.333 に答える
29

あなたが持っているものは正しいです。もちろん、emp1とitem1のポインタ値が同じであることがわかります。

于 2009-06-28T22:53:17.180 に答える
16

これが最も正しいと思います。

printf("%p", (void *)emp1);
printf("%p", (void *)*emp1);

printf()は可変個引数関数であり、適切な型の引数を渡す必要があります。標準は%p取ると言いますvoid *

于 2009-06-29T01:19:31.580 に答える
10

基本的なポインタアドレスの表示はすでに解決しているように見えるので、ダブルポインタのアドレスを確認する方法は次のとおりです。

char **a;
char *b;
char c = 'H';

b = &c;
a = &b;

次の手順を実行すると、ダブルポインタのアドレスにアクセスできますa

printf("a points at this memory location: %p", a);
printf("which points at this other memory location: %p", *a);
于 2009-06-28T23:01:59.407 に答える
5
char c = 'A';
printf("ptr: %p,\tvalue: %c,\tand also address: %zu", &c, c, &c);

結果:

ptr: 0x7ffc48e5105f,    value: A,    and also address: 140721531457631
于 2013-03-11T11:48:45.393 に答える
0

私は、特に新しいハードウェアでこの立場にあります。独自の16進ダンプルーチンを作成することをお勧めします。データとそれらが存在するアドレスをすべて一緒に表示することができます。それは良い習慣であり、信頼を築くものです。

于 2009-06-29T03:18:07.690 に答える