
構造体の配列を関数の引数として渡そうとすると
エラーになってしまいます
ネットで調べてもいまいちわからなかったので
ここで質問させてもらいます
#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を探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
unsigned char配列への入力の仕方
-
配列で格納したものをmsgboxで...
-
C言語初心者 構造体 課題について
-
エラ-メッセ-ジの意味を教え...
-
LGノートPCグラムについて
-
配列を含む構造体の初期値について
-
LOOKUP使用方法
-
ヘッダーファイルからの取り込...
-
【Mathematica】 Protectされて...
-
MIPSアセンブリ言語で配列を宣...
-
配列を使わずに、変数名を動的...
-
VBで動的なメモリの確保
-
DXライブラリでの2Dの描画...
-
C言語 配列の再初期化
-
ExcelVBAで質問です。離れた二...
-
VBで構造体の配列を関数に渡す...
-
二次元配列の引数渡し
-
C言語でのカンマ区切りについて
-
高速化したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
C# Listを使わずに2次元配列の...
-
配列を使わずに、変数名を動的...
-
【速いブラインドタッチ】手を...
-
ExcelVBAで質問です。離れた二...
-
C言語で特定列だけを抽出して配...
-
配列を含む構造体の初期値について
-
配列で格納したものをmsgboxで...
-
配列をEraseしてもメモリが開放...
-
配列の参照渡しで型が一致しま...
-
先頭アドレスとは何ですか?
-
複数の選択範囲の行番号を個別...
-
メモリの初期値
-
VBで構造体の配列を関数に渡す...
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
Excel、VBAのユーザーフォーム...
-
C言語 配列の再初期化
-
Redimした動的配列はEraseする...
-
【C言語】配列の中に配列を入れ...
おすすめ情報