No.1ベストアンサー
- 回答日時:
練習用の小さなプログラムならともかく、
実用的な規模になると、mainに全部書くのは非現実的です。
int a1[10];
int a2[10];
の2つの配列があったとして、これをソートするプログラムを作るとしたら、
a1のソートプログラム
a2のソートプログラム(a1のものをコピーしてa1→a2に書き換え)
と書くのは無駄です。
そこで
ソート(a1);
ソート(a2);
のように、配列を引数として受け付ける関数「ソート」を作って、引数として配列を渡すのが現実的です。
他にも、合計、平均、比較などなど、配列を対象にした処理はいくらでもあります。
int a[5] ;
と宣言したら、「aという名前の配列」です。
関数に渡したいのは「配列」ですから、 「func(a)」のように、名前だけを使います。
宣言以外の場所では、 a[5] は、 配列aの5番目の要素、の意味になります。
a : intの配列(長さ5) ;
っていう宣言だったら、 配列なのは「a」だとわかりやすかったかもしれませんが、
C言語ではそうなっていないので、受け入れるしかないです。
受け取る関数の定義は
void func(型 b)
みたいに型を指定します。
これも 配列を受けとるときに
void func(int配列 b)
みたいにできればいいのですが、できません。
/* typedefを使うなどで、できなくはないですが */
ここでの型の指定は、変数宣言するときと同じ書式にすることに決まっています。
なので
void func(int b[])
となります。
仮引数の[] が空なのは、ちょっと複雑な事情があります。
正確に言えば、C言語では「配列を渡しません」
配列名は、いろんな場面で「先頭要素へのポインタ」となります。
func(a) としたときには、実は、 func( &a[0] ) と実行されています。
そして受けとる方関数側も「配列を受け取る」のではなく、「ポインタを受け取っています」
void func(int b[])
は
void func(int * b)
の別の書き方でしかありません。
ポインタには、「要素数」なんてものはないですから、引数の[]の中に数値を書いても使いどころがありません。
/* 多重配列だと、ちょっと事情が違います */
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- C言語・C++・C# C言語 配列とポインタについて 2 2022/06/02 11:53
- C言語・C++・C# c言語 配列とポインタについて 3 2023/02/09 22:53
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Excel(エクセル) INDEX関数とMATCH関数を使用し値を返す数式についてです 2 2022/04/20 13:40
- Microsoft ASP プログラミング関係で質問です。 3 2022/10/11 16:06
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
【C言語】配列の中に配列を入れ...
-
C# Listを使わずに2次元配列の...
-
C++ vectorに配列をプッシュしたい
-
if文の判定条件に配列
-
Redimした動的配列はEraseする...
-
配列の参照渡しで型が一致しま...
-
配列で格納したものをmsgboxで...
-
電子書籍を見るためにはどうし...
-
C言語の配列番号が"0"から始ま...
-
ExcelVBAで質問です。離れた二...
-
VB.netでRadioButtonを配列にし...
-
【速いブラインドタッチ】手を...
-
配列の総和
-
C# 配列の変数宣言について。
-
ファイルの読み込みとメモリ確...
-
Dimとは・・・
-
VB.netの配列とVB6の配列の違い
-
配列を使わずに、変数名を動的...
-
【Mathematica】 Protectされて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
C# Listを使わずに2次元配列の...
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
配列の参照渡しで型が一致しま...
-
ExcelVBAで質問です。離れた二...
-
unsigned char配列への入力の仕方
-
VBで構造体の配列を関数に渡す...
-
C++ vectorに配列をプッシュしたい
-
C言語で特定列だけを抽出して配...
-
複数の選択範囲の行番号を個別...
-
Excel、VBAのユーザーフォーム...
-
配列をEraseしてもメモリが開放...
-
配列を含む構造体の初期値について
-
【速いブラインドタッチ】手を...
-
Redimした動的配列はEraseする...
-
C言語 配列の再初期化
おすすめ情報