読者です 読者をやめる 読者になる 読者になる

迷いませんか?

プログラミング、電子工作、ゲーム・・・etc、色々やるけど中途半端なブログです。

C言語のポインタに関する考察

プログラミング C/C++

SDLでゲームを作り始めたのですが、何故か画像が表示されない!デデーン!
ちなみにそうなった原因はわからなかった・・・
SDL1.2では画像を読み込み最適化するのが違う関数だったんだけどSDL2を使おうとしたら変わっていた。
その後頑張りつつも表示方法を模索していると英語サイトに
「画像を表示したいならめんどくさい道をたどりやがれ!」(意訳)
と書いておるではないか。

色々調べると画像ロードー>テクスチャにセットー>レンダーにコピーー>レンダーを表示という手順を踏むらしい。
とりあえずちっちゃいプログラムで書いてみると表示成功。

そして次にメインの方を置換していくと何故か表示されない・・・
ここでは画像表示を関数に据え置いてるけれど、これを小さく実装すると動く・・・
(ちなみに画像表示がロードを表示するたびに行う仕様になっちゃったんですがどうすればいいんでしょう・・・)
たすけてー!C++er!
色々とデバッグ、とりあえず他のもメインと同じような仕様にしていくと初期化関数でうまくいってないことがわかった。

しかしポインタ引数に指しているアドレスを渡して見ているのでにわかCerには意味がわからない。
いろいろ試していくと引数の設定をポインタのポインタ、渡す引数をポインタのアドレスとすると成功。

ここでポインタについて考えてみた。
まず基本的に、変数を宣言するとき

int x;

としてそのとき

&x; //アドレス
x; //変数の中身

となります。

ポインタの場合

int *y = &x;
*y;
y;
&y;

とすると、それぞれ上からxの内容、xのアドレス、yポインタ『自体』のアドレスになります。

ここでダブルポインタにすると

int **z = &y;
**z;
*z;
z;
&z;

と宣言すると思います。
この場合、予想ですが上からy本体、yのアドレス、yポインタ『自体』のアドレス、zポインタ『自体』のアドレスとなると思います。

上のものはすべて予想ですが、ここから考えるにあたると。

**hogehoge

ダブルポインタにしない限り、ポインタのアドレスを書き換えることができなかったのでしょう(適当


ここまでが僕の推理だ!


〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

上のものは全て僕の持論で、確実に間違っていると思われますのでご注意ください

これから、ポインタについて勉強してきます!