
No.2ベストアンサー
- 回答日時:
下のように書けばよいと思います。
#include <stdio.h>
void func(int arr[4][4]);
void func2(int (*arr)[4]);
int main(void)
{
int array[4][4];
func(array);
func2(array);
return 0;
}
void func(int arr[4][4])
{
}
void func2(int (*arr)[4])
{
}
関数プロトタイプを呼び出す際の引数にも、宣言時の引数にも同じようにhairetsu[4][4]と記載するのかと思っていました。
例に書いていただいた通り、関数プロトタイプを呼び出す引数の[4][4]を消してみたらうまくいきました。
勉強になりました。ありがとうございます。
No.5
- 回答日時:
配列の情報全体を渡したいのか、一要素の情報だけでよいのかによって解決方法は変わります。
元のコードでは、hairetsuは、hairetsu[0][0]~hairetsu[3][3]までしかありませんから、にもかかわらずhairetsu[4][4]と書けば、未定義の動作を引き起こしてしまいます。
関数プロトタイプを呼び出す際の引数にも、宣言時の引数にも同じようにhairetsu[4][4]と記載するのかと思っていました。
なるほど、宣言時とは違う意味になってしまうのですね・・・
勉強になりました。ありがとうございます。
No.4
- 回答日時:
kansuA() が示されたので、B も C もということで、3つの関数を作ってみました(BorlandC++5.5.1)。
解決の糸口になればよろしいのですが・・。
注:あえて関数側の引数名は、いっしょにしています。
実際の場面では、( main とも含め)それぞれ別の名前が間違いが少ないかと・・。
#include <stdio.h>
double kansuA( double [ 5 ][ 5 ] ); // [][ 5 ] でも
double kansuB( double [ 5 ] ); // [] でも
double kansuC( double );
int main()
{
double result;
double hairetsu[ 5 ][ 5 ];
hairetsu[ 3 ][ 1 ] = 9.111;
hairetsu[ 3 ][ 2 ] = 90.0;
hairetsu[ 4 ][ 4 ] = -99.111;
result = kansuA( hairetsu ); // [ 0 ][ 0 ] - [ 4 ][ 4 ] の25ケ
printf( "A %lf\n", result );
result = kansuB( hairetsu[ 3 ] ); // [ 3 ][ 0 ] - [ 3 ][ 4 ] の5ケ
printf( "B %lf\n", result );
result = kansuC( hairetsu[ 4 ][ 4 ] ); // #1「補足」と同じの1ケ
printf( "C %lf\n", result );
return( 0 );
}
double kansuA( double hairetsu[][ 5 ] ) // [ 5 ][ 5 ] でも
{
return( hairetsu[ 3 ][ 1 ] + hairetsu[ 3 ][ 2 ] );
}
double kansuB( double hairetsu[] ) // [ 5 ] でも
{
return( hairetsu[ 1 ] + hairetsu[ 9 ] ); // ★[ 9 ]注目
}
double kansuC( double hairetsu )
{
return( hairetsu );
}
注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
関数プロトタイプを呼び出す際の引数にも、宣言時の引数にも同じようにhairetsu[4][4]と記載するのかと思っていました。
呼び出す際は、[4][4]の部分は省略するのですね・・・
勉強になりました。ありがとうございます。
No.3
- 回答日時:
resultA = kansuA(hairetsu[4][4]);
とかくとhairetsu[4][4]はdouble型になりますのでkansuAの引数として宣言しているdouble[4][4]と型が合わずにエラーが出ます。
resultA = kansuA(hairetsu);
と書くか、関数の仕様を
void kansuA(double foo);
とするのがよろしいかと。
むむむ なにやら難しいですね・・
どうも引数とか配列とか、「値を渡す」ということを理解できていないようです。。。
今回は、引数の[]を外したらうまくコンパイルできましたが、教えていただいたことをメモして後学に生かしたいと思います。
ありがとうございました。
No.1
- 回答日時:
具体的にどんなコードを書いたのか、補足してください。
この回答への補足
初心者でうろ覚えですが、以下のような感じです。
よろしくお願いします。
void kansuA(double hairetsu[4][4]);
void main (int argc, char**argv)
{
double resultA;
double hairetsu[4][4];
hairetsu[1][1] = 90;
hairetsu[1][2] = 0;
hairetsu[1][3] = 0;
hairetsu[2][1] = 0;
hairetsu[2][2] = 0;
hairetsu[2][3] = 0;
hairetsu[3][1] = 45;
hairetsu[3][2] = 90;
hairetsu[3][3] = 0;
resultA = kansuA(hairetsu[4][4]);
return 0;
}
---------------------------------
void kansuA(double hairetsu[4][4]){
なにかしらの処理
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# c言語 配列とポインタについて 3 2023/02/09 22:53
- C言語・C++・C# メインプログラムに#include <algorithm>を書いて、 そのメインプログラムが // 3 2023/05/02 11:24
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- Excel(エクセル) エクセルでエラーを無視して一番左側のセルの値を返したい 2 2023/07/27 13:06
- UNIX・Linux bash環境でのエラー対応をお願い致します。 1 2022/11/26 17:41
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- Excel(エクセル) 年齢ごとの商品の販売個数を集計しようとしています。 a列が日付、b列が年齢、c列が販売個数のばあいで 4 2022/09/26 22:35
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C 開放してるのにエラー(doubl...
-
doubleの変数にintとintの割り...
-
正規分布の乱数生成
-
微分方程式(ルンゲ=クッタ)...
-
float型とdouble型の変数の違い...
-
相互相関関数
-
至急です! マクロ定義で #defi...
-
int とdoubleの比較
-
インデックスが配列の境界外です.
-
qsortと動的確保の2次元配列
-
型変換のitoaのaって?
-
long doubleの表示方法
-
difftime()について
-
二次関数で
-
c言語で、繰り返し文の中で、0....
-
C言語 関数プロトタイプ宣言の...
-
3次元の最短距離計測 MFC...
-
浮動小数点の誤差のあわせ方
-
C言語のプログラムで質問です。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C 開放してるのにエラー(doubl...
-
doubleの変数にintとintの割り...
-
至急です! マクロ定義で #defi...
-
C言語の型による処理速度の違い
-
C言語 関数プロトタイプ宣言の...
-
float型とdouble型の変数の違い...
-
C言語を実行すると-infが出てき...
-
c言語で、繰り返し文の中で、0....
-
関数におけるif文とreturn文に...
-
int とdoubleの比較
-
difftime()について
-
(C,C++言語)関数の引数は自動キ...
-
listに構造体を格納
-
数値を指数部と仮数部に分離したい
-
DWORDの警告
-
浮動小数点の誤差のあわせ方
-
doubleは常に%lfとするべきなのか
-
C言語でdouble型の小数点の引き...
-
-1.#IND00と出てしまうのですが...
おすすめ情報