为什么C输出内存位置/指针而不是数组的值?

时间:2017-06-14 19:25:57

标签: c arrays printf

我尝试在C中编写一个应该输出这样的程序:

  A B C D E F G H
1 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0

代码:

#include <stdio.h>
#define FILA 8
#define COLUMNA 8

int main(void)
{
    int nFila = 1;
    int tablero[FILA][COLUMNA] = {};
    int i, j;
    printf("  A B C D E F G H\n");
    for (i = 0; i < FILA; i++)
    {
        printf("%d ", nFila);
        nFila++;
        for (j = 0; i < COLUMNA; j++)
        {
            printf("%d ", tablero[i][j]);
        }
        printf("\n");
    }
return 0;
}

然而,它为每个看似是内存地址的数组索引输出随机数... 我怎么能做到这一点?

2 个答案:

答案 0 :(得分:1)

您还应该初始化子数组:

#include <stdio.h>
#define FILA 8
#define COLUMNA 8

int main(void)
{
    int nFila = 1;
    int tablero[FILA][COLUMNA] = {{},};
    int i, j;
    printf("  A B C D E F G H\n");
    for (i = 0; i < FILA; i++)
    {   
        printf("%d ", nFila);
        nFila++;
        for (j = 0; j < COLUMNA; j++)
        {
            printf("%d ", tablero[i][j]);
        }
        printf("\n");
    }   
return 0;
}

BTW我也在内循环中修复了条件。

答案 1 :(得分:0)

您的输出中有垃圾值。
您可以通过用0部分初始化数组 tablero 将数组中的所有值设置为0.
因此,数组中的所有值都将初始化为0。

int tablero[FILA][COLUMNA] = {0};
此外,您的代码中存在错误 请将您的专线for (j = 0; i < COLUMNA; j++)更正为:
for (j = 0; j< COLUMNA; j++)