わけあって構造体のアドレス経由で渡す仕様に変更しようと思っています。
どうやればfunc1をそれほどいじらずにfunc2にように変更できますでしょうか。
func1はかなり複雑につくりこんであるため、引数と変数型宣言部分だけでごまかせる方法を探しています。
ご助力をお願いします。
#include <stdio.h>
#include <stdlib.h>
typedef struct _hoge{
int* array[10][10];
} Hoge;
void func1(int* array[10][10]){//仮引数であれば二次元配列に添字をつけられるため
int* i = (int*)malloc(sizeof(int));
*i = 1;
array[0][0] = i;//添字で指定できる
}
void func2(Hoge* hoge){//
//int* array[10][10] = hoge->array;//コンパイルエラー
int*** array = (int***)hoge->array;//これだとコンパイルできるけど
int* i = (int*)malloc(sizeof(int));
*i = 2;
array[0][0] = i;//セグメントエラー
}
int main(void){
int i,j;
Hoge* hoge = (Hoge*)malloc(sizeof(Hoge));
func1(hoge->array);
printf("%d\n",*(hoge->array[0][0]));//1が表示される
func2(hoge);
printf("%d",*(hoge->array[0][0]));//2が表示されない
return(0);
}