前提・実現したいこと
以下のコードをコンパイルしたいのですがエラーが発生してしまいます。コード自体は間違っていないような気がするのですが原因がわかりません。
発生している問題・エラーメッセージ
mission6-15.c:8:15: エラー: 読み取り専用位置 ‘(*(c + (sizetype)((long unsigned int)i * 16)))[j]’ への代入です 8 | c[i][j] = 0; | ^ mission6-15.c:10:17: エラー: 読み取り専用位置 ‘(*(c + (sizetype)((long unsigned int)i * 16)))[j]’ への代入です 10 | c[i][j] += a[i][k] * b[i][k]; |
該当のソースコード
mission6
1#include<stdio.h> 2 3void mat_mul(const int a[4][3], const int b[3][4], const int c[4][4]) { 4 int i, j, k; 5 6 for (i = 0; i < 4; i++) { 7 for (j = 0; j < 4; j++) { 8 c[i][j] = 0; 9 for (k = 0; k < 3; k++) 10 c[i][j] += a[i][k] * b[k][k]; 11 } 12 } 13} 14 15int main (void) { 16 int i, j; 17 int mx[4][3]; 18 int my[3][4]; 19 int mz[4][4]; 20 21 printf("4行3列のmxと3行4列のmyの積を求めます。\n"); 22 23 puts("行列mx"); 24 for (i = 0; i < 3; i++) { 25 for (j = 0; j < 4; j++) { 26 printf("mx[%d][%d]", i, j); 27 scanf("%d", &mx[i][j]); 28 } 29 } 30 31 mat_mul(mx, my, mz); 32 33 puts("行列の積"); 34 for (i = 0; i < 4; i++) { 35 for (j = 0; j < 4; j++) 36 printf("%d", mz[i][j]); 37 putchar('\n'); 38 } 39 return 0; 40}
試したこと
『新・解きながら学ぶC言語』という本に掲載されていたコードをそのまま写しました。環境はLinuxでgccコンパイラ(gcc -o mission6-15 mission6-15.c)を使用しました。