我要打印类似a[1][1]=11
,a[1][2]=12
等的内容,因此我对此进行了编码,以避免指针从0开始。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "nrutilz.h"
#define n 5
int main() {
int a[n][n], i, j, x;
for (i=1; i<n+1; i++) {
for (j=1; j<n+1; j++) {
a[i][j]=10*i+j;
}
}
for (i=1; i<n+1; i++) {
for (j=1; j<n+1; j++) {
printf("a[%d][%d] = %3d\n ",i,j,a[i][j]);
}
}
}
这给了我想要的结果,但是也给了我一个Abort trap 6错误,使我无法在下一步中使用此矩阵。
我知道我必须写一个我不拥有的内存,但是我不知道我应该改变什么。
答案 0 :(得分:3)
您正在砸堆栈! 您必须将第一个1索引重新映射回原始0。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
enum { n = 5 };
int main(void)
{
int a[n][n];
for (int i = 1; i < n + 1; ++i) {
for (int k = 1; k < n + 1; ++k) {
a[i - 1][k - 1] = 10 * i + k;
}
}
for (int i = 1; i < n + 1; ++i) {
for (int k = 1; k < n + 1; ++k) {
printf("a[%d][%d] = %3d\n ", i, k, a[i - 1][k - 1]);
}
}
}
答案 1 :(得分:2)
数组索引出现问题。
for (i=1; i<n+1; i++)
应该是
for (i=0; i<n; i++)
,同样。请记住,C使用基于0的数组索引。
对于 打印 部分,您只需添加1
即可使打印看起来像基于 1的(FWIW) ,类似
printf("a[%d][%d] = %3d\n ",i+1,j+1,a[i][j]); //add 1 to i and j value for printing