領域確保
int **imatrix(int row, int column) { int i; int **x; x = (int**)calloc(row, sizeof(int*)); for (i = 0;i < row;i++) x[i] = (int*)calloc(column,sizeof(int)); //cheak if (x == NULL) { fprintf(stderr,"out of memory\n"); exit(8); } return x; }
領域解放
void i2dfree(int **p,int row,int column) { int i; for (i = 0; i < row; i++) free(p[i]); free(p); }
ここにあるのは、2次元int型用なので、double型・complex型も使いたい場合は、必要なところをint→double or complexに直して作ってください。
ちなみにmallocは領域確保のみですが、callocはmalloc後に初期化してくれます。
これはローカル変数のポインタを返しとるから本当はやらない方がいい。
返信削除配列の確保を関数化したかったら、引数として確保したい変数のポインタを渡したほうがいいかも。
参照URL貼っときます。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1426129389
あとは、#defineでマクロを使って関数化したように見せるっていう手もあるな。
返信削除staticを付けると、xをグローバル変数で定義したような感じになる。
返信削除つまり実体としては1つしか存在しないことになって、何度関数を呼び出しても一つの変数の領域を何度も確保するだけになってしまう。