[解決済み] (uint32_t*)とは何ですか?
2022-03-07 20:26:28
質問
理解するのに苦労しています
*(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です。
関連
-
[解決済み】MB/sとMiB/sを計算する方法は?
-
[解決済み】Makefile:1: ***セパレータがありません。停止します。
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み] C言語のコードで「:-!」とは何ですか?
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】C言語におけるsize_tとは?
-
[解決済み】C言語の「static」関数とは?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】変数の警告が設定されているが使用されていない
-
[解決済み】ポインタと整数の比較で警告が出る
-
[解決済み】Cygwin - Makefile-error: ターゲット `main.o' のレシピに失敗しました。
-
[解決済み】C 未知の型名「my_structure」。
-
[解決済み】EAGAINとはどういう意味ですか?
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み】MPI通信でMPI_Bcastを使用する場合
-
[解決済み] [Solved] .Cファイルをコンパイルしています。アーキテクチャ x86_64 の未定義シンボル
-
[解決済み】スタックスマッシュを検出しました
-
[解決済み】エラー:呼び出されたオブジェクトは、関数または関数ポインタではない