多次元の配列を返すint型関数が機能しません。 (①)行目と(②)行目からcとdをprintfするのですが、 値が異なります。cとdの中身を同じようにしたいです。 cは正常にprintfしますが、dは正常にprintfしません。 まずコードです。 #include <stdio.h> #include <stdlib.h> int* a(int* b, int n) { int* c= malloc(sizeof(int) * 5 * 4 * 4); if (c == NULL) { printf("Cannot allocate memory.¥n"); exit(1); } int i; int j; int k; for (i = 0; i < 5; i++) { for (j = 0; j < 4; j++) { for (k = 0; k < 4; k++) { *&c[i * n + j * (n - 1) + k] = b[(j + 1) * n + k]; printf("c[%d][%d][%d]=%d¥n", i, j, k, *&c[i * n + j * (n - 1) + k])・・・① } } } return c; } int main(void) { int i; int j; int k; int x[5][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25} }; int* d; d = a(x, 5); for (i = 0; i < 5; i++) { for (j = 0; j < 4; j++) { for (k = 0; k < 4; k++) { printf("d[%d][%d][%d]=%d¥n", i, j, k, *&d[i * 5 + j * 4 + k]);・・・② } } } return 0; } 次に出力値です。cは正常に表示します。dは[0][][]と[4][][]は正常に表示し、cと値が同じですが、[1][][]と[2][][]、[3][][]については間違っています。 出力値はurlにあります。 https://sites.google.com/view/esfngiowsfgiej 行列とポインタについていろいろ調べ、試してみましたがどれもうまくいきません。私の理解力や知識に問題がありそうです。 ちなみにvisualstudio2019では、このコードではエラーや警告は出ません。 またbをprintfしましたが、しっかりとaが出力されています。 宜しくお願いいたします。
C言語関連