
No.2ベストアンサー
- 回答日時:
int [3][3] 型を受け取りたいなら単純に
void func(int t[3][3])
でいいのでは?
表記が違うだけで、以下の2つも同じです
void func(int t[][3])
void func(int (*t)[3])
呼び出す側は
func(tbl);
でできます。
いろんな大きさの二次元配列(正確には、配列の配列)を使いたいから[3]と指定できない。
だからint * としてアドレスを渡して、大きさは別の引数で指定したい。
という話なら、そのまま
void func(int * q,int rmax,int cmax)
とか宣言すればいいだけです。
呼び出し側は
/* コンパイル時に警告(warning)が出るけど動作する */
func(tbl,3,3);
/* 配列を引数で渡す=先頭のアドレスを渡す という(隠れた)ルールを明示的に表記する */
func(&(tbl[0][0]),3,3);
/* 型をキャストしても、アドレス自体は変化しない */
func((int *)tbl,3,3);
> *(int (**)[3])&p = tbl;
指定の型のポインタにキャスト→ * をつけて実体へアクセス
というのは、テクニックとしてはありだし
/* 組込みとかでは
*((char *)0x0120) = 0xf0 ;
のように intでアドレスを直接指定→ポインタにキャスト→ * をつけて実体へアクセス→書き込み とすることがあります。
*/
int tbl4[4][4] ;
を
*(int (**)[3])&p = tbl4;
としようとしたら警告になるので間違い防止に使えなくはないです。
ですが、こんなややこしく書かなくても、同じことができますし、
下記のようなものの方が普通に使われています。
/* コンパイル時に警告(warning)が出るけど動作する */
p=tbl;
/* 先頭のアドレス という内容を明示的に表記する */
p=&(tbl[0][0]);
/* 型をキャストしても、アドレス自体は変化しない */
p=(int *)tbl;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
C言語において、 配列要素をひ...
-
C言語の2次元配列 容量が大き...
-
要素数・要素の値が未定の配列...
-
配列の要素数に変数を入れたい...
-
2つの要素をペアで管理する方法
-
C言語を使って、ファイルの読み...
-
C#で配列が空かを判定するには?
-
MFC - ダイアログボックスのPic...
-
構造体のextern方法
-
void型のfunc( )に二次元配列の...
-
int i, int i[1];
-
IPアドレスを配列に代入する方法。
-
2番目の最大値を求める
-
C言語 ファイルの指定された行...
-
C#で構造体の配列を持った構造...
-
C言語 配列の長さの上限
-
init関数の意味
-
C++で入力した文字列から数字を...
-
CStringからchar*への型変換に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
C言語において、 配列要素をひ...
-
c言語
-
C言語 ファイルの指定された行...
-
define で 配列
-
C#で構造体の配列を持った構造...
-
C言語の課題が出たのですが自力...
-
char型配列をint型に代入するには
-
C#で配列が空かを判定するには?
-
MFCのCArrayを使った二次元配列
-
コンボボックスでデフォルト値...
-
MFC - ダイアログボックスのPic...
-
c言語 構造体
-
2番目の最大値を求める
-
C言語から質問です。
-
Cのエラー
-
プログラミングに関する問題が...
-
C言語の2次元配列 容量が大き...
-
Visual C++を 用いたテキストフ...
おすすめ情報