
構造体の配列を関数の引数として渡そうとすると
エラーになってしまいます
ネットで調べてもいまいちわからなかったので
ここで質問させてもらいます
#include<stdio.h>
struct A{
・
・
・
};
void func(struct A *p);
int main(void)
{
struct A x[3][4] = {
・
・
・
};
func(x);
return 0;
}
void func(struct A *p){
・
・
・
}
どうすれば渡すことができるのでしょうか?
どなたか助言お願いします。
No.4ベストアンサー
- 回答日時:
> void func(struct A **p);
型が違いますのでおそらく最近のコンパイラでは
コンパイルエラーになると思います。
>> struct A x[3][4]
xの型は struct A[3][4]型です。
正しい引数としては、
「void func( struct A[3][4] x )」
となります。
ここで配列の最初の要素を不定数にしたい場合は、
No3さんの「void func(struct A p[][4])」を使うか、
「void func( struct A (*p)[4] )」とする必要があります。
>void func(struct A *p)
多少強引ですが、先頭のポインタ自体は渡されるので、
キャストして呼び出しを行っても動くでしょう。
但し、呼び出された関数内では渡された構造体が、
2次元配列なのか、N次元配列なのか、
1つの構造体のポインタなのか知るすべはありませんので
扱いに注意が必要です。

No.5
- 回答日時:
すみません。
No.4さんの言うとおり、多次元配列では>> void func(struct A **p);
>型が違いますのでおそらく最近のコンパイラでは
>コンパイルエラーになると思います。
ではコンパイラが通りませんね。
記憶に頼って回答などするから、こういう馬鹿をする<(__)>。
MinGW入れて、gccで念のため確かめました。
一応、
void func(struct A p[][]);
はコンパイラは通ることは通るけれど、サイズが不定なので、func内部で要素にアクセスするのは無理か。せめて p[][4] にしないと。

No.2
- 回答日時:
自信はないですが。
ええと、コンパイルエラーになるのでしょうか?
func(x);
の引数の型が合っていないような感じがします。
これだと、
void func(struct A **p);
のような・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
配列の参照渡しで型が一致しま...
-
【速いブラインドタッチ】手を...
-
C# Listを使わずに2次元配列の...
-
C言語で特定列だけを抽出して配...
-
C++ vectorに配列をプッシュしたい
-
do-while文の処理が実行されない
-
Functionの戻り値を2次元配列...
-
配列を含む構造体の初期値について
-
MFC、ダイアログベースでのモー...
-
パスカルの三角形
-
VBで構造体の配列を関数に渡す...
-
VB.netの配列とVB6の配列の違い
-
乱数表示のプログラム
-
VBで動的なメモリの確保
-
現在、C/C++ で作成したプログ...
-
ヘッダーファイルからの取り込...
-
【C言語】配列の中に配列を入れ...
-
シーケンスの解析に使うclustal...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
先頭アドレスとは何ですか?
-
C# Listを使わずに2次元配列の...
-
配列を使わずに、変数名を動的...
-
複数の選択範囲の行番号を個別...
-
配列で格納したものをmsgboxで...
-
【速いブラインドタッチ】手を...
-
C言語で特定列だけを抽出して配...
-
配列をEraseしてもメモリが開放...
-
配列を含む構造体の初期値について
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
メモリの初期値
-
C++ vectorに配列をプッシュしたい
-
Redimした動的配列はEraseする...
-
VBで構造体の配列を関数に渡す...
-
【C言語】配列の中に配列を入れ...
-
ExcelVBAで質問です。離れた二...
-
Functionの戻り値を2次元配列...
-
ガウスの消去法のプログラム
おすすめ情報