[解決済み] (uint32_t*)とは何ですか?
2022-03-01 04:52:39
質問
理解するのに苦労しています
*(uint32_t*)
.
持っているとしよう。
uint32_t* ptr;
uint32_t num
*(uint32_t*)(ptr + num); // What does this do? Does it
解決方法は?
uint32_t
は32ビットを保証する数値型です。値は符号なし、つまり0から2までの範囲になります
32
- 1.
この
uint32_t* ptr;
型のポインタを宣言しています。
uint32_t*
しかし、そのポインタは初期化されていない、つまり
つまり、そのポインタは特定の場所を指していないのです。このポインタを通してメモリにアクセスしようとすると、未定義の動作が発生し、プログラムがクラッシュする可能性があります。
これは
uint32_t num;
は単なる型変数で
uint32_t
.
これは
*(uint32_t*)(ptr + num);
ptr + num
は新しいポインタを返します。これはポインタ演算と呼ばれるものです。普通の算術と同じですが、コンパイラが型の大きさを考慮するのが特徴です。
を考慮しています。例えば
ptr + num
をベースにしたメモリアドレスとして、元の
ptr
のバイト数を加えたポインタを使用します。
num
uint32_t
オブジェクトを作成します。
は
(uint32_t*) x
はキャストです。これは、コンパイラが式
x
であるかのように
uint32_t*
. この場合、必要ないくらいです。
なぜなら
ptr + num
はすでに
uint32_t*
.
は
*
はデリファレンス演算子で、ポインタを介してメモリにアクセスするために使用されます。式全体は次の式と等価である。
ptr[num];
さて、これらの変数はどれも初期化されていないため、結果はゴミとなります。
しかし、このように初期化すると
uint32_t arr[] = { 1, 3, 5, 7, 9 };
uint32_t *ptr = arr;
uint32_t num = 2;
printf("%u\n", *(ptr + num));
これは5と表示されます。
ptr[2]
は5です。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind が "Invalid write of size 8" で文句を言う。
-
[解決済み】C 言語の添え字で配列の要素値を代入すると、配列でもポインタでもベクトルでもない値になる
-
[解決済み】Cコンパイルエラーです。Idは1終了ステータスを返した
-
[解決済み】「無効なイニシャライザー」と表示されるのですが、何が間違っているのでしょうか?
-
[解決済み] テスト
-
[解決済み] struct has no member named
-
[解決済み】MB/sとMiB/sを計算する方法は?
-
[解決済み】サイズ8の無効な読み取り - Valgrind + C
-
[解決済み】fgetsによるセグメンテーションフォールト(コアダンプ) - と思う。
-
[解決済み】Makefile:1: ***セパレータがありません。停止します。