有多少种方法可以打印我们的整数数组?

时间:2015-04-07 07:17:24

标签: c arrays

我可以像这样声明整数数组的数组:

int dataA[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

并分别以这两种方式打印出阵列:

#include <stdio.h>

int main() {

    int dataA[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
    int i = 0;
    for (; i < 3; i++) {
        int j = 0;
        for (; j < 3; j++)
            printf("%i,", dataA[i][j]);
        printf(";");
    }

    puts("");

    int dataB[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
    int *p = (int *) dataB;
    int m = 0;
    for (; m < 3; m++) {
        int n = 0;
        for (; n < 3; n++)
            printf("%i,", *p + ((m * 3) + n));
        printf(";");
    }

return 0;
}

如果我以这种方式声明(这个声明是对的吗?),如何以这种方式打印出来怎么样?

#include <stdio.h>

int main() {

    puts("");

    int *dataC[3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
    /*
     * How to print out the array in this situation?
     */

    puts("");

    int x[] = { 1, 2, 3 };
    int y[] = { 4, 5, 6 };
    int z[] = { 7, 8, 9 };
    int *dataD[3] = { &x, &y, &z };
    /*
     * How to print out the array in this situation?
     */

    return 0;
}

1 个答案:

答案 0 :(得分:3)

dataC无法以这种方式初始化。 dataC的元素属于int *类型,而您使用int []初始化它们。

正如@WhozCraig评论的那样,如果您这样做,它将是一个有效的初始化:

int *dataC[3] = {(int []){1, 2, 3}, (int []){4, 5, 6}, (int []){7, 8, 9}};

您可以使用与dataA相同的方法输出数组。

dataD也不能以这种方式初始化。 dataD的元素属于int *类型。 xyz可以转换为int *类型,但您对&运算符的使用不正确 - &x键入int **,而不是int *

如果您这样做,那将是一个有效的初始化:

int *dataD[3] = { x, y, z };

如果是这种情况,您只需使用与dataA相同的方法输出此数组。