如何使用以1开头的指针打印矩阵?

时间:2018-11-29 08:24:06

标签: c arrays

我要打印类似a[1][1]=11a[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错误,使我无法在下一步中使用此矩阵。

我知道我必须写一个我不拥有的内存,但是我不知道我应该改变什么。

2 个答案:

答案 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