6

16進形式のリテラルメモリアドレスが与えられた場合、このメモリ位置をアドレス指定するポインタをCで作成するにはどうすればよいですか?

私のプラットフォーム(IBM iSeries)のメモリアドレスは128ビットです。Cタイプlong longも128ビットです。

文字列(char配列)へのメモリアドレスがあると想像してください。C622D0129B0129F0

このメモリ位置を直接アドレス指定するための正しいC構文を想定しています。

const char* const p = (const char* const)0xC622D0129B0129F0ULL

私はULL接尾辞を使用して、unsignedlonglongリテラルを示します。

Whether my kernel/platform/operating system will allow me to do this is a different question. I first want to know if my syntax is correct.

4

2 に答える 2

12

あなたの構文はほぼ正しいです。あなたはそれらの1つを必要としませんconst

const char* const p = (const char*)0xC622D0129B0129F0ULL

const直前は、初期化後に変数を変更できないことpを示しています。何を指しているのかについては何も言及していないので、右側にある必要はありません。 pp

于 2010-08-29T07:53:06.447 に答える
1

Cのアドレスリテラルのようなものはありません。

整数とポインタの間で機能することが保証されている唯一のものは、void*からuintptr_t(存在する場合)にキャストされてから、元に戻ります。どこかからアドレスを整数として取得した場合、これはタイプである必要がありuintptr_tます。次のようなものを使用します

(void*)(uintptr_t)UINTMAX_C(0xC622D0129B0129F0)

それを元に戻すために。

stdint.hタイプuintptr_tとマクロを取得するには、インクルードする必要がありUINTMAX_Cます。

于 2010-08-29T09:51:33.940 に答える