ポインタについて

アバター
BEAT
記事: 4
登録日時: 14年前
住所: 兵庫県S市杜王町
連絡を取る:

ポインタについて

投稿記事 by BEAT » 14年前

今日ゲームプログラミングの教科書の「ポインタ」のところ眺めて思ったんですけど

「もう全部ポインタでやっちゃえばグローバル変数いらなくね?」

自分が今まで進めてきたゲーム制作「めんどくさい」の一言でポインタ使ってませんでしたが
ポインタってすごい便利だったんですねww

関数の参照渡しを使えばその関数が「何の変数を受け取っているのか」がわかり、
更に受け取っていることがわかることで「どんな働きをしているのか」がわかりやすくなりますよね。

しかもメモリも節約できるという・・・

ということで素朴な疑問。
「皆さんはどんな変数をグローバル変数にしますか?」もしくは
「どんな変数にポインタを使いますか?」です。

つまらない疑問ですが、よろしければご回答お願いします

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前

Re: ポインタについて

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

・基本的にグローバル変数は使わない。
・たとえグローバルでも参照する関数は最小限に抑える。
・ポインタで渡すのは呼び出した関数側で書き換えるとき&大きめの構造体を渡したいとき(構造体全体を破壊される覚悟が必要)。小さなら構造体なら値渡し。
・引数が配列ならポインタ渡しとほぼ同義。
ってとこ。

別の人の質問で質問掲示板にも書いたけど、ここを読んでみよう!
「プログラミングの禁じ手Web版 C言語編(InternetArchiveよりサルベージ) - Akio’s Log」
http://d.hatena.ne.jp/elwoodblues/20090206/1233878763

きれいなソースコードを書けることは就職にも有利なので今のうちに悪い癖は出来るだけ取りましょう。
最後に編集したユーザー softya(ソフト屋) on 2011年6月08日(水) 19:00 [ 編集 1 回目 ]

アバター
BEAT
記事: 4
登録日時: 14年前
住所: 兵庫県S市杜王町
連絡を取る:

Re: ポインタについて

投稿記事 by BEAT » 14年前

コメントありがとうございます!

>基本的にグローバル変数は使わない
うわぁ・・・やっぱりそっちのほうがスリムですもんね・・・

>ポインタで渡すのは呼び出した関数側で書き換えるとき
値渡しとポインタ渡しの違いをはっきりできていなかったのでよくわかりました

リンク先も拝見させていただきます。

>きれいなソースコードを書けることは就職にも有利なので今のうちに悪い癖は出来るだけ取りましょう。
はい、少しずつ綺麗なソースをかけるように精進します。

アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前

Re: ポインタについて

投稿記事 by MoNoQLoREATOR » 14年前

fopen()を使ったときにポインタを宣言したことを除いて、今まで私はポインタを宣言することはありませんでした。

しかし、ポインタ自体はよく使います。
配列変数や構造体を扱うときは必須ですからね。
また、私はvectorやstringといったSTLが大好きですので、ポインタはものすごく便利だな、と思っています。
それに、関数の引数には参照渡しを使いまくっています。
「参照」という名前ですが、制限付きポインタという感じですよね。

ただ、私はグローバル変数を沢山宣言します。
グローバル変数を全く宣言せずにプログラムを書くなんて、ちょっと想像できません。
一度勉強してみようと思います。

アバター
BEAT
記事: 4
登録日時: 14年前
住所: 兵庫県S市杜王町
連絡を取る:

Re: ポインタについて

投稿記事 by BEAT » 14年前

コメントありがとうございます。

なるほど、やっぱりそういうところで必要になってくるよね。

>ただ、渡しはグローバル変数をたくさん宣言します
同じくwwでも多すぎるのってやっぱりいくないみたいだね(´・ω・`)

>一度勉強してみようと思います。
一緒に頑張ろう!

っていうかポインタ変数とポインタ(参照)を分けて説明してなかったか質問内容わかりにくいですね

naohiro19
記事: 256
登録日時: 15年前

RE: ポインタについて

投稿記事 by naohiro19 » 14年前

CODE:

//a.h
#ifndef DEF_A_H
#define DEF_A_H
int Get();
void Inc();
#endif

CODE:

//a.c
static int m_inc = 0;
int Get()
{ return m_inc; }
void Inc() { m_inc++; }

CODE:

//main.c
#include 
#include "a.h"
int main(void)
{
    Inc();
    Inc();
    Inc();
    printf("%d\n", Get() );
    return 0;
}
ゲームプログラミングの館を参考にしてみました