質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

5回答

402閲覧

c言語 5目並べ 引数

fumi6328

総合スコア15

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/01/16 22:36

c言語で5目並べのプログラムを作っています。
main関数内で縦横の長さを入力してboardを作り、それをdisp関数に渡して
盤面を表示させたいのですがh,wはどのように渡せばいいのでしょうか?
もちろんdisp関数内で縦横の長さを変更したりはしません。回答お願いしますm(__)m
(boardを渡すのは省略しています)

C

1#include <stdio.h> 2 3void disp1(int h,int w){ 4} 5void disp2(const int h,const int w){ 6} 7void disp3(int *h,int *w){ 8} 9void disp4(const int *h,const int *w){ 10} 11 12int main() 13{ 14 int h,w; 15 int board[h][w]; 16 17 disp1(h,w); 18 disp2(h,w); 19 disp3(&h,&w); 20 disp4(&h,&w); 21 22 return 0; 23}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ヘッダーにこのように定義してはどうでしょうか?
cの場合はこの方法しかありませんので、どこでも使えて便利ですよ。

c

1#define DISP_H 9 2#define DISP_W 9

それか、ものすごくメモリを気にするのであれば、プリミティブ型にもconstを付けて下記の様にしますね。引数が横長になり良い印象を受けませんが仕方ない事です。

c

1void disp(const int& W,const int& H) 2{ 3}

それか、スケールの構造体を作るかですね。2次元の話をするときは作っておいた方が何かと便利ですよ。

c

1struct scale{ 2 int w , h; 3}; 4 5void disp(const scale& s) 6{ 7} 8

投稿2019/01/17 00:30

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストなのは

void disp2(const int h,const int w)

でしょう。が、一般的にプリミティブ型にconstつけるのはあんまし行われませんね

void disp1(int h,int w)

まあ、こっちのほうがよく使われます

投稿2019/01/16 23:07

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

こんにちは。

私もy_waiwaiさんの回答に賛成です。

int等の組み込み型は多くのケースでコピー渡しの方が効率が良いので、渡すだけで変更したものを呼び出し元へ戻さない場合はポインタ渡しのdisp3, disp4を選ぶ利点はありません。
disp1とdisp2については「好みの差」ですね。どちらの場合も呼び出し元の値を関数側で変更することはできません。
disp2は関数内で変更するコードを書くとコンパイラがバグではないか?とエラーにしてくれるというメリットはあります。ただ、ワークエリアとしては使えなくなります。仮引数のスコープは狭くconstをつけなくてもバグになることは多くはないのでconstは無いほうが良いケースも少なくないと思います。


ちなみに、int型ではなくそれなりにコピー負荷が高い構造体を渡す場合は、disp4が好ましいです。disp4の内部でポイント先が変更されないことが明確になりますし、間違って変更することも無くなります。更に、コンパイラがそれを保証するからdisp4を使う人も安心です。

投稿2019/01/17 04:10

編集2019/01/17 04:10
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fumi6328

2019/01/17 09:39

ありがとうございます!とても参考になりました
guest

0

五目並べのルールを洗練した連珠では15×15路(囲碁より狭い)とルールで決まってますので、これをマクロで設定してしまう手もあります。

投稿2019/01/17 09:35

myoon

総合スコア100

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

関数内で変更する必要がないならdisp1disp2でしょう。
もっともこの手の処理の場合、ゲーム内で盤面の大きさが変わることはないでしょうから、マクロ定義したほうがいいと思いますが。

C

1#define H 9 2#define W 9 3void disp(void) 4{ 5}

投稿2019/01/17 00:06

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問