
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を探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
float と double
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
三角関数のグラフ
-
プログラムでの数字につく”f”の...
-
c言語 標準体重計算のプログラ...
-
C言語を実行すると-infが出てき...
-
C# 引数の型 自由
-
至急です! マクロ定義で #defi...
-
int とdoubleの比較
-
c言語でユーザ関数を利用して複...
-
c言語で、繰り返し文の中で、0....
-
C言語の型による処理速度の違い
-
C言語でintをdoubleに
-
(C,C++言語)関数の引数は自動キ...
-
浮動小数点の比較について
-
listに構造体を格納
-
C言語 関数プロトタイプ宣言の...
-
C言語初心者 構造体 課題について
-
C言語のプログラムで#include<m...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
C言語を実行すると-infが出てき...
-
C 開放してるのにエラー(doubl...
-
c言語で、繰り返し文の中で、0....
-
doubleの変数にintとintの割り...
-
至急です! マクロ定義で #defi...
-
C言語の型による処理速度の違い
-
C言語 関数プロトタイプ宣言の...
-
2次方程式の解を求めるプログ...
-
関数におけるif文とreturn文に...
-
doubleは常に%lfとするべきなのか
-
int とdoubleの比較
-
C言語のプログラムで#include<m...
-
C言語で-23乗を取り扱うには
-
データ数の多い構造体配列
-
指数の表示
-
C言語のpow関数の不具合
-
c言語のプログラミングについて...
-
c言語のコンパイルエラー canno...
おすすめ情報