ポインタについてなんですけど
今、Cのポインタを勉強しています。
しかし、よく理解できていません、というかポインタを使う場面てどんな時ですか?
メモリ節約するとかいろいろ調べたんですけど具体的にどんなことに使ってみなさんはどんな風に理解してるんですか?
それとCでゲームを作れますか?(インベーダーゲームとか)
後、一番思っていたんですけどどこまで理解したらその言語を使いこなせるといえるでしょうか?
お願いします。
ポインタについて
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: ポインタについて
まずインデントを使うようにしましょう。バグ率が下がります。
http://uchan.net/w/index.php?mixcpp%2F% ... 5%B9%A5%C8
ポインタに関しては、メモリの動的確保時に使うのは避けれません。
あとは、引数の受け渡し時にスピード的に有利なので巨大な構造体などは使う必要も出てきます。
それと配列や文字列(文字配列)はポインタと扱われるので、ポインタを知らないと引数の受け渡しでさえ出来ないことになります。
他には便利なアルゴリズムなどは速度効率からポインタが使われることが多いです。
>それとCでゲームを作れますか?(インベーダーゲームとか)
DXライブラリを組み合わせれば作れます。
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/
ここの掲示板で過去ログにインベーダを作っていた人もいますよ。
「インベーダー site:dixq.net/forum/ - Google 検索」
https://www.google.co.jp/search?q=%E3%8 ... 2Fforum%2F
http://uchan.net/w/index.php?mixcpp%2F% ... 5%B9%A5%C8
ポインタに関しては、メモリの動的確保時に使うのは避けれません。
あとは、引数の受け渡し時にスピード的に有利なので巨大な構造体などは使う必要も出てきます。
それと配列や文字列(文字配列)はポインタと扱われるので、ポインタを知らないと引数の受け渡しでさえ出来ないことになります。
他には便利なアルゴリズムなどは速度効率からポインタが使われることが多いです。
>それとCでゲームを作れますか?(インベーダーゲームとか)
DXライブラリを組み合わせれば作れます。
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/
ここの掲示板で過去ログにインベーダを作っていた人もいますよ。
「インベーダー site:dixq.net/forum/ - Google 検索」
https://www.google.co.jp/search?q=%E3%8 ... 2Fforum%2F
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ポインタについて
例えば、10ステージあって、ステージごとに10種のモンスターからランダムに1種出てくるゲームを作るとします。
ポインタが使えないと10×10で100パターンのプログラムを作る必要があります。
実際のゲームでは変化する部分は敵モンスターだけではないので、天文学的な数字のプログラムを作らなければならなくなってしまいます。
ポインタを使うとデータを入れ替えることができます。
ステージを入れ替えるのもモンスターを入れ替えるのもそれぞれ個別に可能なので、10+10で20パターンのプログラムで済むことになります。
変化する部分があったらその部分だけを作れば良いので同じことを繰り返す無駄がありません。
むしろすべてを覚えている必要はありません。
分からないことをネットで調べてもかまいません。
プログラムでやりたいことをそつなくコードに起こせるようになったら使いこなしていると言えるかと思います。
インベーダーゲームを作りたいと思ったとき、作ることができるかどうか判断できて作れるならどう作ったら良いか分かるくらいのレベルから始まって、プレイ動画を見ただけでまったく同じものが作れるくらいのレベルまであります。
ポインタが使えないと10×10で100パターンのプログラムを作る必要があります。
実際のゲームでは変化する部分は敵モンスターだけではないので、天文学的な数字のプログラムを作らなければならなくなってしまいます。
ポインタを使うとデータを入れ替えることができます。
ステージを入れ替えるのもモンスターを入れ替えるのもそれぞれ個別に可能なので、10+10で20パターンのプログラムで済むことになります。
変化する部分があったらその部分だけを作れば良いので同じことを繰り返す無駄がありません。
プログラム言語をいくら覚えても使いこなしたとは言えません。yaba さんが書きました:後、一番思っていたんですけどどこまで理解したらその言語を使いこなせるといえるでしょうか?
むしろすべてを覚えている必要はありません。
分からないことをネットで調べてもかまいません。
プログラムでやりたいことをそつなくコードに起こせるようになったら使いこなしていると言えるかと思います。
インベーダーゲームを作りたいと思ったとき、作ることができるかどうか判断できて作れるならどう作ったら良いか分かるくらいのレベルから始まって、プレイ動画を見ただけでまったく同じものが作れるくらいのレベルまであります。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: ポインタについて
>文法とかは完璧に覚えた方がいいですか?
完璧には、相当難しいので当面は入門書程度は使えるようになるで十分です。
困ったときにWEBで調べたりポインタ入門書を買ったりすればよいでしょう。
当面はWEBサイトで調べるキーワードを思いつくようになるのを目指したほうが実用的です。
完璧には、相当難しいので当面は入門書程度は使えるようになるで十分です。
困ったときにWEBで調べたりポインタ入門書を買ったりすればよいでしょう。
当面はWEBサイトで調べるキーワードを思いつくようになるのを目指したほうが実用的です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ポインタについて
ISLeさん
> ポインタが使えないと10×10で100パターンのプログラムを作る必要があります。
この例えの意味を教えてもらえませんか。
ポインタを使わないと100パターンのプログラムになるような例が思いつかないのですが。
ポインタを持たない言語はそこまで不便ですか?
> ポインタが使えないと10×10で100パターンのプログラムを作る必要があります。
この例えの意味を教えてもらえませんか。
ポインタを使わないと100パターンのプログラムになるような例が思いつかないのですが。
ポインタを持たない言語はそこまで不便ですか?
Re: ポインタについて
ポインタを使わずに100パターンにならないようにする方法はあります。たいちう さんが書きました:ISLeさん
> ポインタが使えないと10×10で100パターンのプログラムを作る必要があります。
この例えの意味を教えてもらえませんか。
ポインタを使わないと100パターンのプログラムになるような例が思いつかないのですが。
ポインタを持たない言語はそこまで不便ですか?
ただし
ファイルの読み書きができないので、データテーブルはソースファイルに直書きしなければいけない。
配列名を直接使わなくてはいけないので、データテーブルを処理するコードはデータテーブルをグローバル参照しなければいけない。
引数は値渡しでメモリの動的確保もできないので、個別に参照するデータの構造や大きさは固定しておかなくてはいけない。
といった制限があります。
いわゆるサンプルプログラムレベルであればポインタを使えないデメリットはあまり現れません。
そのままプログラムの規模を大きくしていくととんでもないサイズに膨れ上がることになるという例えです。
Re: ポインタについて
ありがとうございました。納得です。
考えてみると、要所要所でポインタを使うように設計された言語と
最初からポインタを持たない言語と比較するのは無意味でした。
お付き合いありがとうございました。
考えてみると、要所要所でポインタを使うように設計された言語と
最初からポインタを持たない言語と比較するのは無意味でした。
お付き合いありがとうございました。