2013-05-28 7 views
1

Это код, который я имею:Заполнение массива массивов

#include <cstdlib> 
#include <stdio.h> 

using namespace std; 

int main(int argc, char** argv) { 

    int a[] = {0,1,2,3,4,5,6,7}; 
    int array_grande[3][8]; 

    for(int m=0; m<3; m++) { 
     for(int i=0; i<8; i++) { 
       array_grande[m] = a[i]; 
     } 
    } 

    return 0; 
} 

Я объявил array_grande как массив с 3-х положениях и каждой позиции 8 Интс, так что я хочу, чтобы это массив массивов.

array_grande = {{0,1,2,3,4,5,6,7},{0,1,2,3,4,5,6,7},{0,1,2,3,4,5,6,7}} 

код я сделал не работает, я предполагаю, что это из-за второго индекса array_grande. Может ли кто-нибудь дать мне руку? Я хотел бы использовать код как можно больше. Заранее спасибо

+0

Вашего код не компилируется с компилятором. Тэг изменен. – pmg

+0

изменить 'array_grande [m] = a [i];' to 'array_grande [m] [i] = a [i];' – Dipto

ответ

8
array_grande[m] = a[i]; 

Вы, вероятно, хотите

array_grande[m][i] = a[i]; 

Или вы можете использовать функцию copy из algorithm заголовка:

std::copy(std::begin(a), std::end(a), array_grande[m]); 

Другой способ использует std::array:

std::array<int, 8> a{{0,1,2,3,4,5,6,7}}; 
std::array<std::array<int, 8>, 3> array_grande; 

for(auto& elem: array_grande) 
    elem = a; 

Или, проще:

std::array<int, 8> a{{0,1,2,3,4,5,6,7}}; 
std::array<std::array<int, 8>, 3> array_grande{{a, a, a}}; 
+0

Я изменил его на 'array_grande [m] [i] = a [i] ; ', но когда я пытаюсь выполнить цикл для печати элементов ' for (int p = 0; p <3; p ++) printf ("% d", array_grande [p]); ' Отображаются странные значения : '1606415760 1606415792 1606415824' –

+1

' printf ("% d", array_grande [p]) '- печатает адрес массива, а не элементы. Вы должны также перебирать 'array_grande [p]'. – soon

1

Если вы посмотрите на ваше внутреннее назначение:

array_grande[m] = a[i]; 

Вы Назначив int (a[i]) в массив или указатель на INT (array_grande[m]). Вам просто нужно изменить его следующим образом:

array_grande[m][i] = a[i]; 
1
#include <cstdlib> 
#include <stdio.h> 

using namespace std; 

int main(int argc, char** argv) { 

    int a[] = {0,1,2,3,4,5,6,7}; 
    int array_grande[3][8]; 

    for(int m=0; m<3; m++) { 
     for(int i=0; i<8; i++) { 
       array_grande[m][i] = a[i]; 
     } 
    } 

    return 0; 
} 

вам нужно добавить [I] внутри Аррей, как это 2 d массив.

по array_grande [м] он все равно будет 1 d массив поэтому вам нужно добавить [], с тем чтобы сделать тхам из той же размерности

1
int a[] = {0,1,2,3,4,5,6,7}; 

a[i] представляет один ИНТ как 01 и т.д.

int array_grande[3][8]; 

Вы создаете 2D-массив из int.

array_grande[0] -> | | | | | | | | | 
array_grande[1] -> | | | | | | | | | 
array_grande[2] -> | | | | | | | | | 

array_grande[i] уже имеет адрес, так как его 1D-массив. Вы не можете назначить ему a[i].

Чтобы сохранить значение, вам нужно обратиться к местоположению в каждой строке.

for(int m=0; m<3; m++) 
{ 
    for(int i=0; i<8; i++) 
    { 
      array_grande[m][i] = a[i]; 
    } 
} 

i.e.*(array_grande[m] + i) = a[i] получить строку и перейти к iя места

2

Есть несколько способов, чтобы достичь своей цели:

#include <cstdlib> 
#include <stdio.h> 
#include <memory.h> 

int main(int argc, char** argv) { 

    int a[] = {0,1,2,3,4,5,6,7}; 
    int array_grande[3][8]; 
    int array_grande_2[3][8] = { {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7} }; 
    int array_grande_3[3][8]; 
    int array_grande_4[3][8]; 

    for(int m=0; m<3; m++) { 
     for(int i=0; i<8; i++) { 
       array_grande[m][i] = a[i]; 
     } 
    } 

    for(int m=0; m<3; m++) { 
     for(int i=0; i<8; i++) { 
       array_grande_3[m][i] = i; 
     } 
    } 

    for(int m=0; m<3; m++) { 
     memcpy(&array_grande_4[m], a, 8 * sizeof(int)); 
    } 

    return 0; 
} 
Смежные вопросы