A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
C 前提なら、別々に関数を用意するしかないと思います。
# int, double 等のように型が違う場合も同じですよね。
C++ でも大丈夫なのであれば、Matrix() をテンプレート関数とすることで、一つにまとめることができます。
# N×N の正方マトリックスを想定しています。
========================================================
template<typename T>
void Matrix( T a, T b, T result, int dim )
{
int i, j;
// a[i][j], b[i][j], result[i][j] のように使用できます
// また、dim は配列の次元です。
}
========================================================
あとは、以下のように普通に使うことができます。
/* a, b, result が 2×2 の場合 */
Matrix( a, b, result, 2 );
/* a, b, result が 3×3 の場合 */
Matrix( a, b, result, 3 );
ご参考まで。
No.3
- 回答日時:
配列サイズを引数で渡すしか方法はないです。
多次元配列への動的なキャストを記述できるコンパイラであれば、
以下のサンプルの「#else」部分のように書くことができますが、
VC++ では不可でした。
# こういう記述が C/C++ 言語仕様として正しいかどうかは知りません。
移植性を考慮する必要があれば、1次元配列として処理したほうがいいでしょう。
(以下のサンプルの「#if 0」部分)
//#include "stdafx.h"
#include <stdio.h>
int calc(const int a[], const int b[], int d2, int d1)
{
int sum = 0;
int i, j;
#if 0 // VC++
for (i = 0; i < d2; i++) {
for (j = 0; j < d1; j++) {
sum += a[i*d1 + j] + b[i*d1 + j];
}
}
#else // GCC, other, ...
int (*a2)[d1] = (int (*)[d1])a;
int (*b2)[d1] = (int (*)[d1])b;
for (i = 0; i < d2; i++) {
for (j = 0; j < d1; j++) {
sum += a2[i][j] + b2[i][j];
}
}
#endif
return sum;
}
//int _tmain(int argc, _TCHAR* argv[])
int main(void)
{
const int d2 = 20;
const int d1 = 10;
int a[d2][d1], b[d2][d1];
int i, j;
for (i = 0; i < d2; i++) {
for (j = 0; j < d1; j++) {
a[i][j] = 200;
b[i][j] = 100;
}
}
printf("sum = %d\n", calc(&a[0][0], &b[0][0], d2, d1));
return 0;
}
No.2
- 回答日時:
普通は行列のための構造体を作るんじゃないかなぁ?
struct Matrix {
double **elements;
size_t row;
size_t col;
};
って感じ.
No.1
- 回答日時:
> *aから配列の大きさをわかるにはどうしたらいいですか?
その場合aから、aが示す先にある配列の大きさを知ることはできません。
aはint型へのポインタでしかなく、aが指しているのが配列の1要素なのか単独のint型変数なのかも分かりません。
配列の大きさが必要であれば、
配列の大きさを受け渡しする処理を書く必要があります。
(main関数の第1引数のargcみたいに)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
C#で構造体の配列を持った構造...
-
MFCのCArrayを使った二次元配列
-
int i, int i[1];
-
配列の要素数に変数を入れたい...
-
C言語のプログラミングで、ある...
-
C言語について質問です。
-
関数の仮引数は宣言か式か
-
C++のnewで確保したメモリーの...
-
VB.NETでファイル名順にファイ...
-
C言語 構造体の中に共用体を定...
-
C言語のポインタに直接アドレス...
-
malloc呼び出し時のセグメンテ...
-
C言語 配列の長さの上限
-
構造体配列のソート
-
C言語の文字列?処理 strcpyやl...
-
2次元配列を戻り値とする関数?
-
init関数の意味
-
LoadLibraryでAccess Violation...
-
VBで構造体の配列を関数に渡す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
c言語
-
c言語プログラミング 等差数列...
-
define で 配列
-
構造体のextern方法
-
C#で構造体の配列を持った構造...
-
C言語において、 配列要素をひ...
-
MFC - ダイアログボックスのPic...
-
C言語の2次元配列 容量が大き...
-
2次元配列のマスを数える方法...
-
C言語 ファイルの指定された行...
-
Cのエラー
-
コンボボックスでデフォルト値...
-
C#で配列が空かを判定するには?
-
C#でのフィボナッチ数列
-
ポインタを使って構造体の配列...
-
C言語の課題が出たのですが自力...
-
MFCのCArrayを使った二次元配列
-
C言語の配列のコピーについて
おすすめ情報