ページ 1 / 1
ポインタについて
Posted: 2013年3月26日(火) 13:52
by yaba
ポインタについてなんですけど
今、Cのポインタを勉強しています。
しかし、よく理解できていません、というかポインタを使う場面てどんな時ですか?
メモリ節約するとかいろいろ調べたんですけど具体的にどんなことに使ってみなさんはどんな風に理解してるんですか?
それとCでゲームを作れますか?(インベーダーゲームとか)
後、一番思っていたんですけどどこまで理解したらその言語を使いこなせるといえるでしょうか?
お願いします。
コード:
#include <stdio.h>
int main(void) {
int a;
a = 10;
int *pa;
pa = &a;
printf("%d\n", *pa);
return 0;
}
Re: ポインタについて
Posted: 2013年3月26日(火) 14:16
by softya(ソフト屋)
まずインデントを使うようにしましょう。バグ率が下がります。
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
Re: ポインタについて
Posted: 2013年3月26日(火) 17:22
by ISLe
例えば、10ステージあって、ステージごとに10種のモンスターからランダムに1種出てくるゲームを作るとします。
ポインタが使えないと10×10で100パターンのプログラムを作る必要があります。
実際のゲームでは変化する部分は敵モンスターだけではないので、天文学的な数字のプログラムを作らなければならなくなってしまいます。
ポインタを使うとデータを入れ替えることができます。
ステージを入れ替えるのもモンスターを入れ替えるのもそれぞれ個別に可能なので、10+10で20パターンのプログラムで済むことになります。
変化する部分があったらその部分だけを作れば良いので同じことを繰り返す無駄がありません。
yaba さんが書きました:後、一番思っていたんですけどどこまで理解したらその言語を使いこなせるといえるでしょうか?
プログラム言語をいくら覚えても使いこなしたとは言えません。
むしろすべてを覚えている必要はありません。
分からないことをネットで調べてもかまいません。
プログラムでやりたいことをそつなくコードに起こせるようになったら使いこなしていると言えるかと思います。
インベーダーゲームを作りたいと思ったとき、作ることができるかどうか判断できて作れるならどう作ったら良いか分かるくらいのレベルから始まって、プレイ動画を見ただけでまったく同じものが作れるくらいのレベルまであります。
Re: ポインタについて
Posted: 2013年3月27日(水) 19:53
by yaba
返信ありがとうございます。
いずれ頑張ってインベーダーゲームを作れるようになります(。ω。)
Re: ポインタについて
Posted: 2013年3月27日(水) 19:55
by yaba
返信ありがとうございます。
文法とかは完璧に覚えた方がいいですか?
Re: ポインタについて
Posted: 2013年3月27日(水) 20:54
by softya(ソフト屋)
>文法とかは完璧に覚えた方がいいですか?
完璧には、相当難しいので当面は入門書程度は使えるようになるで十分です。
困ったときにWEBで調べたりポインタ入門書を買ったりすればよいでしょう。
当面はWEBサイトで調べるキーワードを思いつくようになるのを目指したほうが実用的です。
Re: ポインタについて
Posted: 2013年3月27日(水) 21:35
by たいちう
ISLeさん
> ポインタが使えないと10×10で100パターンのプログラムを作る必要があります。
この例えの意味を教えてもらえませんか。
ポインタを使わないと100パターンのプログラムになるような例が思いつかないのですが。
ポインタを持たない言語はそこまで不便ですか?
Re: ポインタについて
Posted: 2013年3月28日(木) 01:15
by ISLe
たいちう さんが書きました:ISLeさん
> ポインタが使えないと10×10で100パターンのプログラムを作る必要があります。
この例えの意味を教えてもらえませんか。
ポインタを使わないと100パターンのプログラムになるような例が思いつかないのですが。
ポインタを持たない言語はそこまで不便ですか?
ポインタを使わずに100パターンにならないようにする方法はあります。
ただし
ファイルの読み書きができないので、データテーブルはソースファイルに直書きしなければいけない。
配列名を直接使わなくてはいけないので、データテーブルを処理するコードはデータテーブルをグローバル参照しなければいけない。
引数は値渡しでメモリの動的確保もできないので、個別に参照するデータの構造や大きさは固定しておかなくてはいけない。
といった制限があります。
いわゆるサンプルプログラムレベルであればポインタを使えないデメリットはあまり現れません。
そのままプログラムの規模を大きくしていくととんでもないサイズに膨れ上がることになるという例えです。
Re: ポインタについて
Posted: 2013年3月29日(金) 00:36
by たいちう
ありがとうございました。納得です。
考えてみると、要所要所でポインタを使うように設計された言語と
最初からポインタを持たない言語と比較するのは無意味でした。
お付き合いありがとうございました。
Re: ポインタについて
Posted: 2013年3月29日(金) 10:15
by yaba
ありがとうございました