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

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

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

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

Q&A

4回答

11824閲覧

c言語の配列を値渡ししたい

sakakendo0321

総合スコア45

C

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

0グッド

1クリップ

投稿2017/02/20 11:52

編集2017/02/20 11:53

cでポインタ変数の値を渡すとき

c

1int *a; 2func(*a);

↑のように簡単に配列も値渡しする方法はありませんか?
配列をポインタ渡しすると書き換えた時渡す前の配列にも影響を及ぼすのが嫌なので
配列のコピーを作ってもいいのですが2次元配列の時などには

c

1int a[10][10],b[10][10]; 2for(int i=0;i<10;i++){ 3 for(j=0;j<10;j++){ 4 b[i][j]=a[i][j]; 5 } 6}

このように長くなってしまうのが嫌なのです。
ひとつ目の変数を渡す時のように簡単にできる方法はありませんか?

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

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

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

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

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

guest

回答4

0

配列をポインタ渡しすると書き換えた時渡す前の配列にも影響を及ぼすのが嫌なので

const使おう

c言語の配列を値渡ししたい

構造体の中に配列入れれば構造体は値渡しできる。
C++のstd::arrayはまさにそれをやっている

投稿2017/02/20 11:55

yumetodo

総合スコア5850

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

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

0

理想はconst修飾子を関数の仮引数に適切に指定するのがいいと思います。

が、単純に配列のコピーを短く書きたいというのであれば以下のようにmemcpy()を利用します。memcpy()の戻り値はコピー先へのポインタなので、そのままfuncの引数に書いてしまえば短く書けます。

C

1int a[10][10],b[10][10]; 2func(memcpy(b, a, sizeof(a)));

投稿2017/02/21 01:37

Y.H.

総合スコア7914

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

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

0

memcpyで配列のコピーを作るというのはどうでしょう

投稿2017/02/20 23:42

7_rate

総合スコア28

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

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

0

構造体を作って渡すのは?

C

1struct s_my_array { 2 int val[10][10]; 3}; 4 5func(struct s_my_array p) 6{ 7 ... 8} 9 10caller() 11{ 12 struct s_my_array a; 13 14 // a に値を設定 15 16 func(a); 17}

ちなみに、最近のCであれば、

C

1 struct s_my_array a, b; 2 3 // a に値を設定 4 b = a;

で、構造体 b に a の内容をコピーできます。

投稿2017/02/20 13:30

ShinyaAnan

総合スコア241

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

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

yumetodo

2017/02/20 15:05

>最近のCであれば むしろそれ出来なかったのいつのCですかね・・・。
ShinyaAnan

2017/02/20 22:10

ANSI準拠以前のCコンパイラ(C89)であれば出来るので、それ以前という事になるかと。 1980年代までのCコンパイラ。自分が就職直後は、仕事で使っていたものですから。
yumetodo

2017/02/25 08:49

うへぇ・・・。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問