2015-04-07 4 views
1

я могу объявить массив целого массива, как это:Сколько способов печати массива целочисленного массива?

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; 
} 

ответ

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 *. x, y и z могут быть преобразованы к типу int *, но ваше использование оператора & неверно - &x здесь типа int **, не int *.

Это будет действительная инициализацией, если вы сделали:

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

Если это так, то вы можете просто выходной этот массив, используя тот же метод, использованный для dataA.

+0

Есть ли способ, как литье может сделать int * dataC [3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; действует? –

+1

@LeeWilliam * составной литерал *: 'int * dataC [3] = {(int []) {1, 2, 3}, (int []) {4, 5, 6}, (int []) {7 , 8, 9}}; '[Смотрите это в прямом эфире] (http://ideone.com/E47X2g). – WhozCraig

+0

@WhozCraig Это именно то, что я хочу знать, спасибо. –

Смежные вопросы