ポインタについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
yaba

ポインタについて

#1

投稿記事 by yaba » 11年前

ポインタについてなんですけど
今、Cのポインタを勉強しています。
しかし、よく理解できていません、というかポインタを使う場面てどんな時ですか?
メモリ節約するとかいろいろ調べたんですけど具体的にどんなことに使ってみなさんはどんな風に理解してるんですか?
それとCでゲームを作れますか?(インベーダーゲームとか)

後、一番思っていたんですけどどこまで理解したらその言語を使いこなせるといえるでしょうか?
お願いします。

コード:


    #include <stdio.h>
     
     
    int main(void) {
     
    int a;
    a = 10;
     
    int *pa;
    pa = &a;
    printf("%d\n", *pa);
    return 0;
    }


アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: ポインタについて

#2

投稿記事 by softya(ソフト屋) » 11年前

まずインデントを使うようにしましょう。バグ率が下がります。
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(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: ポインタについて

#3

投稿記事 by ISLe » 11年前

例えば、10ステージあって、ステージごとに10種のモンスターからランダムに1種出てくるゲームを作るとします。

ポインタが使えないと10×10で100パターンのプログラムを作る必要があります。
実際のゲームでは変化する部分は敵モンスターだけではないので、天文学的な数字のプログラムを作らなければならなくなってしまいます。

ポインタを使うとデータを入れ替えることができます。
ステージを入れ替えるのもモンスターを入れ替えるのもそれぞれ個別に可能なので、10+10で20パターンのプログラムで済むことになります。
変化する部分があったらその部分だけを作れば良いので同じことを繰り返す無駄がありません。

yaba さんが書きました:後、一番思っていたんですけどどこまで理解したらその言語を使いこなせるといえるでしょうか?
プログラム言語をいくら覚えても使いこなしたとは言えません。

むしろすべてを覚えている必要はありません。
分からないことをネットで調べてもかまいません。
プログラムでやりたいことをそつなくコードに起こせるようになったら使いこなしていると言えるかと思います。

インベーダーゲームを作りたいと思ったとき、作ることができるかどうか判断できて作れるならどう作ったら良いか分かるくらいのレベルから始まって、プレイ動画を見ただけでまったく同じものが作れるくらいのレベルまであります。

yaba

Re: ポインタについて

#4

投稿記事 by yaba » 11年前

返信ありがとうございます。

いずれ頑張ってインベーダーゲームを作れるようになります(。ω。)

yaba

Re: ポインタについて

#5

投稿記事 by yaba » 11年前

返信ありがとうございます。

文法とかは完璧に覚えた方がいいですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: ポインタについて

#6

投稿記事 by softya(ソフト屋) » 11年前

>文法とかは完璧に覚えた方がいいですか?

完璧には、相当難しいので当面は入門書程度は使えるようになるで十分です。
困ったときにWEBで調べたりポインタ入門書を買ったりすればよいでしょう。
当面はWEBサイトで調べるキーワードを思いつくようになるのを目指したほうが実用的です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

たいちう
記事: 418
登録日時: 13年前

Re: ポインタについて

#7

投稿記事 by たいちう » 11年前

ISLeさん

> ポインタが使えないと10×10で100パターンのプログラムを作る必要があります。

この例えの意味を教えてもらえませんか。
ポインタを使わないと100パターンのプログラムになるような例が思いつかないのですが。
ポインタを持たない言語はそこまで不便ですか?

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: ポインタについて

#8

投稿記事 by ISLe » 11年前

たいちう さんが書きました:ISLeさん

> ポインタが使えないと10×10で100パターンのプログラムを作る必要があります。

この例えの意味を教えてもらえませんか。
ポインタを使わないと100パターンのプログラムになるような例が思いつかないのですが。
ポインタを持たない言語はそこまで不便ですか?
ポインタを使わずに100パターンにならないようにする方法はあります。

ただし
ファイルの読み書きができないので、データテーブルはソースファイルに直書きしなければいけない。
配列名を直接使わなくてはいけないので、データテーブルを処理するコードはデータテーブルをグローバル参照しなければいけない。
引数は値渡しでメモリの動的確保もできないので、個別に参照するデータの構造や大きさは固定しておかなくてはいけない。
といった制限があります。

いわゆるサンプルプログラムレベルであればポインタを使えないデメリットはあまり現れません。
そのままプログラムの規模を大きくしていくととんでもないサイズに膨れ上がることになるという例えです。

たいちう
記事: 418
登録日時: 13年前

Re: ポインタについて

#9

投稿記事 by たいちう » 11年前

ありがとうございました。納得です。
考えてみると、要所要所でポインタを使うように設計された言語と
最初からポインタを持たない言語と比較するのは無意味でした。

お付き合いありがとうございました。

yaba
記事: 1
登録日時: 11年前
住所: 京都府

Re: ポインタについて

#10

投稿記事 by yaba » 11年前

ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る