如何从函数返回数据类型 int** 并存储它?

Posted

技术标签:

【中文标题】如何从函数返回数据类型 int** 并存储它?【英文标题】:How to return data type int** from a fuction and store it? 【发布时间】:2021-03-16 15:43:58 【问题描述】:

我编写了一个使用 Loubere 算法求解幻方的代码。我已经为这个算法创建了一个函数,我想使用 int** 返回一个值,但是我应该怎么做,因为我在函数体中使用了 2D 数组,我应该如何将它存储在 main() 函数中

#include <iostream>
#include <cstdlib>
using namespace std ;
int ** magicSquare ( int size )

int number;
int sq=size*size;enter code here
int mid=size/2;
//for array
int m=0; 

//rows
int n=mid; //columns
array[m][n]=n;
for(number=1; number<=sq; number++)

n++;
n=n-1;
m=m+1;
if(n==-1)
n=3;
if(m==3)
m=0;
if (array[n][m]  !=0)
n++;
array[n][m]=number;

int* array_rows[size]=array[size][size];    
int** p=array_rows;
return p;

int main()

int dimension;
cout<<"Enter dimension of the magic square : "; cin>>dimension;
magicSquare ( dimension );

【问题讨论】:

返回 std::vector&lt;std::vector&lt;int&gt;&gt; 而不是 int** 你需要正确缩进你的代码。 这行array[m][n]=n;你打算做什么? 你需要先分配一个数组 “返回二维数组”和“返回int**”是有区别的。您想要前者,但您的代码执行后者。指针不是数组 【参考方案1】:

按照建议,您可以使用std::vector&lt;std::vector&lt;int&gt;&gt; 来存储您的数据并正确返回。像这样的:

#include <vector>
#include <iostream>

using square = std::vector<std::vector<int>>;

square makeMagicSquare(size_t size) 
    square magicSquare(size, std::vector(size, 0));

    // <-- Your code here
    // magicSquare[i][j] = ...;

    return magicSquare;


int main()

    square sq = makeMagicSquare(10);

    // Print it
    for (auto& row: sq) 
        for (auto& cell: row) 
            std::cout << cell << ' ';
        
        std::cout << '\n';
    

【讨论】:

【参考方案2】:

如果要将其存储为数组,则需要更改方法以返回 int[][] 而不是 int**。它们的工作方式非常相似,但指针和数组之间存在区别。

您可以完全按照您的预期将其存储为int[][]。存储幻方如下:

int[][] magicSquare = magicSquare(dimension);

这会将您的方法的返回值分配给一个二维数组,然后您必须在程序结束时释放该数组。

请记住,数组的工作方式是给出数据块头部的地址。当您返回一个数组时,即使它是int[][],您也正在引用一个数据块的地址。在这种情况下,它是一个 int 数组块。为了以后访问它,您需要先分配该内存块,然后才能对其进行任何操作。这意味着在您的magicSquare() 方法中,您将需要创建一个包含信息的int[][],并且您可以将其传递给int[][]

免责声明:您绝对可以使用指针来执行此操作,但使用std::vector&lt;std::vector&lt;int&gt;&gt; 会更容易且不太可能导致错误。使用std::vector,您不必分配或释放内存,它可以处理潜在的未定义行为,例如读取数据块的末尾。

【讨论】:

以上是关于如何从函数返回数据类型 int** 并存储它?的主要内容,如果未能解决你的问题,请参考以下文章

Mysql中有类似merge into的函数吗?

实体框架,具有返回类型的函数导入:无..返回 int?

如何使我的构造函数和函数工作,以便我的main()能够显示字符串和int数据?

检查不返回函数的数据类型

C语言中如何实现多组数据输入输出?

如何从 .map 循环返回以从 API 获取数据 [重复]