
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で質問しましょう!
似たような質問が見つかりました
- const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか
- c言語 配列とポインタについて
- メインプログラムに#include
を書いて、 そのメインプログラムが // - c言語 コマンドライン引数
- エクセルでエラーを無視して一番左側のセルの値を返したい
- bash環境でのエラー対応をお願い致します。
- Excel のユーザー定義関数でソルバーが動作しない
- C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並
- 年齢ごとの商品の販売個数を集計しようとしています。 a列が日付、b列が年齢、c列が販売個数のばあいで
- 関数ポインタの高速化のメリット
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
C言語での引数の省略方法
C言語・C++・C#
-
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
C言語 配列の長さの上限
C言語・C++・C#
-
-
4
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
5
C言語のポインターに関する警告
C言語・C++・C#
-
6
バッファとは何ですか
C言語・C++・C#
-
7
fgetsなどのときのstdinのバッファを消すには?
C言語・C++・C#
-
8
コンパイルエラーについて
C言語・C++・C#
-
9
C言語 プロトタイプ宣言
C言語・C++・C#
-
10
c言語のポインタへの文字列入力についてです。
C言語・C++・C#
-
11
fclose()でセグメンテーション違反
C言語・C++・C#
-
12
C言語において、 配列要素をひとつずつ前にずらすコード
C言語・C++・C#
-
13
C言語で、メモリを解放しないで終わるプログラム
C言語・C++・C#
-
14
C言語---ファイルに出力したデータをすべて消去する方法
C言語・C++・C#
-
15
char str[256]の256の意味は?
C言語・C++・C#
-
16
ファイル出力で改行を入れたい!
C言語・C++・C#
-
17
C言語のポインタに直接アドレスを割り振りしたい
C言語・C++・C#
-
18
fopne で失敗する原因
C言語・C++・C#
-
19
空白を含んだ文字列がうまく格納(表示)できない
C言語・C++・C#
-
20
構造体のメンバをfor文で回したい
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C 開放してるのにエラー(doubl...
-
c言語で、繰り返し文の中で、0....
-
doubleの変数にintとintの割り...
-
float型とdouble型の変数の違い...
-
c言語のコンパイルエラー canno...
-
関数におけるif文とreturn文に...
-
C言語を実行すると-infが出てき...
-
浮動小数点の定数
-
int とdoubleの比較
-
-1.#IND00と出てしまうのですが...
-
型変換のitoaのaって?
-
c言語の問題
-
C言語で-23乗を取り扱うには
-
方程式を2分法を用いて解くプロ...
-
C言語の複素数についてです。
-
fgets()による繰り返し入力(c言語)
-
C言語 関数プロトタイプ宣言の...
-
C言語の型による処理速度の違い
-
線形補間
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
doubleの変数にintとintの割り...
-
C 開放してるのにエラー(doubl...
-
float型とdouble型の変数の違い...
-
C言語を実行すると-infが出てき...
-
関数におけるif文とreturn文に...
-
c言語で、繰り返し文の中で、0....
-
Cで3乗根を求める方法
-
int とdoubleの比較
-
C言語 関数プロトタイプ宣言の...
-
C言語の型による処理速度の違い
-
2次方程式の解を求めるプログ...
-
ax^2+bx+c=0の解を求めたいので...
-
至急です! マクロ定義で #defi...
-
C++で外積
-
線形補間
-
指数形式で入力するには
-
doubleは常に%lfとするべきなのか
-
c言語のコンパイルエラー canno...
-
C言語のpow関数の不具合
おすすめ情報