2014-09-07 4 views
0

В полужирной части у меня есть скомпилировать ошибку. кто-то помогает выяснить ошибку? мой код приведен ниже ...Назначение int из типа Compatible int

void _multiDimensionalArray(){ 

    int row = 10; 
    int column = 10; 
    cout << "\n\n For a 2-Dimensional Array:>>>>" << endl; 

    // 2D array is basically an array of pointers to arrays 
    // dynamic array of size 100 
    int pDoubleArray = new int*[row]; 
    for (int i=0; i<column; i++) { 
     pDoubleArray[i] = new int[column]; 
    } 
    // e) exchange rows: 0<------>9 and 3<------>4 
    int (*ptemp)[10][1];  // temp is a pointer to an array of 10 ints 
    ptemp = pDoubleArray; 

    for (int i=0; i<10; i++) { 
     ptemp[i][0] = *(ptemp+4); 
    } 
    for (int i=0; i<10; i++) { 
     cout << ptemp[i] << " " ; 
    } 


} // end of _multiDimensionalArray function 

ответ

0

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

2

Эти объекты имеют разные типы

int **pDoubleArray; 

int (*ptemp)[10][1];   

Таким образом, вы не можете использовать назначение

ptemp = pDoubleArray; 

Даже если использовать литье код будет быть недействительным.

Примите во внимание, что это распределение также недействителен

int pDoubleArray = new int*[row]; 
for (int i=0; i<column; i++) { 
    pDoubleArray[i] = new int[column]; 

вместо столбца в состоянии там должен быть использован Row

for (int i=0; i<row; i++) { 

Примите во внимание, что вы не инициализировать выделенные массивы ,

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

Например, если вы хотите поменять местами строки 1 и 9, то вы можете просто написать

int *tmp = pDoubleArray[1]; 
pDoubleArray[1] = pDoubleArray[9]; 
pDoubleArray[9] = tmp; 

Вот показательная программа

#include <iostream> 

int main() 
{ 
    int row = 10; 
    int column = 10; 

    int **p = new int *[row]; 
    for (int i = 0; i < row; i++) p[i] = new int[column]; 

    for (int i = 0; i < column; i++) p[1][i] = i; 
    for (int i = 0; i < column; i++) p[9][column - i - 1] = i; 

    for (int i = 0; i < column; i++) std::cout << p[1][i] << ' '; 
    std::cout << std::endl; 
    for (int i = 0; i < column; i++) std::cout << p[9][i] << ' '; 
    std::cout << std::endl; 

    int *tmp = p[1]; 
    p[1] = p[9]; 
    p[9] = tmp; 

    for (int i = 0; i < column; i++) std::cout << p[1][i] << ' '; 
    std::cout << std::endl; 
    for (int i = 0; i < column; i++) std::cout << p[9][i] << ' '; 
    std::cout << std::endl; 

    for (int i = 0; i < row; i++) delete [] p[i]; 
    delete []p; 

    return 0; 
} 

Выход

0 1 2 3 4 5 6 7 8 9 
9 8 7 6 5 4 3 2 1 0 
9 8 7 6 5 4 3 2 1 0 
0 1 2 3 4 5 6 7 8 9 

As вы видите, что две строки были заменены.

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