在粗体部分,我有编译错误。有人帮忙找出错误? 我的代码在下面给出......
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];
而不是条件中的列必须使用行
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)
您只需要引用指针的第一个值。一旦引用第一个指针,每隔一个字长度取决于数据类型,就会引用该引用。