从Compatible类型int分配给int

时间:2014-09-07 15:04:27

标签: c++ arrays pointers dynamic-arrays

在粗体部分,我有编译错误。有人帮忙找出错误? 我的代码在下面给出......

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

2 个答案:

答案 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];

而不是条件中的列必须使用行

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 

如您所见,交换了两行。

答案 1 :(得分:0)

您只需要引用指针的第一个值。一旦引用第一个指针,每隔一个字长度取决于数据类型,就会引用该引用。