我想使用从函数返回的二维int数组 我该如何定义函数返回值? 我使用int **但是编译器给出了错误:
int** tableCreator(){
int** table=new int[10][10];
for(int xxx=1;xxx<10;xxx++){
for(int yyy=1;yyy<10;yyy++){
table[xxx][yyy]=xxx*yyy;
}
}
return(table); //Here:cannot convert from 'int (*)[10]' to 'int **'
}
答案 0 :(得分:6)
试试这个:
#include <cstdio>
#include <cstdlib>
int** createTable(int rows, int columns){
int** table = new int*[rows];
for(int i = 0; i < rows; i++) {
table[i] = new int[columns];
for(int j = 0; j < columns; j++){ table[i][j] = (i+j); }// sample set value;
}
return table;
}
void freeTable(int** table, int rows){
if(table){
for(int i = 0; i < rows; i++){ if(table[i]){ delete[] table[i]; } }
delete[] table;
}
}
void printTable(int** table, int rows, int columns){
for(int i = 0; i < rows; i++){
for(int j = 0; j < columns; j++){
printf("(%d,%d) -> %d\n", i, j, table[i][j]);
}
}
}
int main(int argc, char** argv){
int** table = createTable(10, 10);
printTable(table, 10, 10);
freeTable(table, 10);
return 0;
}
你需要第二个循环来在C和类似的操作中分配一个二维数组来释放它。二维数组本质上是一个数组数组,因此可以表示为指针数组。循环初始化指向指针的数组。
根据与@Eric Postpischil的对话进行澄清:更改了createTable以获取行/列数以进行真正的动态分配。
答案 1 :(得分:4)
int** table=new int[10][10];
这是错的。你不能用这种方式在C / C ++中为2D动态数组分配空间。
同时,您将数组大小声明为10
,因此索引来自0-9
,但您尝试在嵌套for循环中为索引10
分配值,这是不对的太
您可以执行以下操作进行分配:
int** table = new int*[10];
for (int i = 0; i < 10; ++i)
{
table[i] = new int[10];
}
答案 2 :(得分:2)
通常,用于指向数组的类型是指向数组元素的指针。由于int
的二维数组是int
数组的数组,因此需要一个指向int
数组的指针。对于某个维度int (*)[N]
,此类型的C ++语法为N
。此代码演示了:
#define N 10
int (*tableCreator())[N]
{
int (*table)[N] = new int[N][N];
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
table[i][j] = i*j;
return table;
}
#include <iostream>
int main()
{
int (*t)[N] = tableCreator();
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < N; ++j)
std::cout << t[i][j] << ' ';
std::cout << '\n';
}
delete [] t;
return 0;
}
答案 3 :(得分:0)
予。 数组不是指针。
II。为什么不vector<vector<int> >
?
III。如果没有,那么:
typedef int Int10Array[10];
Int10Array *arr = new Int10Array[10];
IV。为什么写过界限?你想要明确的鼻恶魔吗?
for(int xxx = 0; xxx < 10; xxx++)
^^^ ^^^^