Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将int[5][5]类型的变量传递给需要int的函数**_C++_C_Multidimensional Array - Fatal编程技术网

C++ 将int[5][5]类型的变量传递给需要int的函数**

C++ 将int[5][5]类型的变量传递给需要int的函数**,c++,c,multidimensional-array,C++,C,Multidimensional Array,我想通过传递一个硬编码数组来测试一个接受运行时分配的多维数组的函数 函数的签名为void generate\u all_path(int**maze,int size),数组定义为int arr[5][5]={REMOVED} 我不太确定如何正确地为函数数组(或者如果不可能)。我们这个多维数组主题很难混淆这么多C++程序员。好吧,解决方案如下: void generate_all_paths(int (*maze)[5], int size); 这就是函数声明的样子。另一种选择,但完全等效 v

我想通过传递一个硬编码数组来测试一个接受运行时分配的多维数组的函数

函数的签名为
void generate\u all_path(int**maze,int size)
,数组定义为
int arr[5][5]={REMOVED}


<>我不太确定如何正确地为函数数组(或者如果不可能)。我们这个多维数组主题很难混淆这么多C++程序员。好吧,解决方案如下:

void generate_all_paths(int (*maze)[5], int size);
这就是函数声明的样子。另一种选择,但完全等效

void generate_all_paths(int maze[][5], int size);
两者都在创建一个参数,该参数是指向5个整数数组的指针。然后,您可以将包含5个整数的数组传递给该函数:

generate_all_paths(arr, 5);
因为数组的第一个元素是5个整数的数组,所以当传递给该函数时,它将自动(隐式)转换为指向第一个元素的指针

在注释中,您已经显示了绑定到
int**
,因为内部和外部维度都必须具有运行时值。多维数组不能再使用了。出于测试目的,您可以创建一个指针数组,如下所示:

int store[5 * 5] = { ..... };
int *arr[5] = { store, store + 5, store + 10, store + 15, store + 20 };
然后,实际上,您可以让函数接受一个
int**
。由于数组的第一个元素是
int*
,它将自动转换为
int**
。另一种方法是将数据保留在二维数组中,但只是创建一个由指向该数组的指针构成的“视图”:

int *arr[5] = { store[0], store[1], store[2], store[3], store[4] };

其中存储是您的
int[5][5]
数组。由于代码>存储[n] < /代码>访问该二维数组的第n个子数组,元素类型是INT/COD>,指针转换类型为int */Cudi>,这将是兼容的。

< P>这个多维数组主题不幸混淆了这么多C++程序员。好吧,解决方案如下:

void generate_all_paths(int (*maze)[5], int size);
这就是函数声明的样子。另一种选择,但完全等效

void generate_all_paths(int maze[][5], int size);
两者都在创建一个参数,该参数是指向5个整数数组的指针。然后,您可以将包含5个整数的数组传递给该函数:

generate_all_paths(arr, 5);
因为数组的第一个元素是5个整数的数组,所以当传递给该函数时,它将自动(隐式)转换为指向第一个元素的指针

在注释中,您已经显示了绑定到
int**
,因为内部和外部维度都必须具有运行时值。多维数组不能再使用了。出于测试目的,您可以创建一个指针数组,如下所示:

int store[5 * 5] = { ..... };
int *arr[5] = { store, store + 5, store + 10, store + 15, store + 20 };
然后,实际上,您可以让函数接受一个
int**
。由于数组的第一个元素是
int*
,它将自动转换为
int**
。另一种方法是将数据保留在二维数组中,但只是创建一个由指向该数组的指针构成的“视图”:

int *arr[5] = { store[0], store[1], store[2], store[3], store[4] };

其中存储是您的
int[5][5]
数组。由于
store[n]
访问该二维数组的第n个子数组,其元素类型为
int
,因此它的指针转换类型为
int*
,这将再次兼容。

arr
是指向您拥有的多维数组的指针,实际上是指向
int
的指针。现在,由于函数接受指向
int
指针的指针,因此需要使用:
&arr
获取
arr
的地址,并将其传递给函数,以便获得以下代码:

要强制数组:将
&arr
传递给函数。
要引用函数中的数组:
*maze[x][y]
arr
是指向您拥有的多维数组的指针,实际上是指向
int
的指针。现在,由于函数接受指向
int
指针的指针,因此需要使用:
&arr
获取
arr
的地址,并将其传递给函数,以便获得以下代码:

要强制数组:将
&arr
传递给函数。 要引用func中的数组:
*maze[x][y]

还有,为什么数组是保留字

事实并非如此。您可能正在使用Visual Studio,因为它在C++/CLI中作为本机托管类型使用,所以它显示为关键字。但是,这与C++无关,VisualStudio在这方面是误导的。 至于您的问题:您可以简单地传递指向char的指针,然后直接传递嵌套数组(前提是您使用的是动态分配的数组):

也就是说,您的函数假定一个固定的、已知的数组长度和一些其他细节。最好使用嵌套的
std::vector
,或
std::string
(例如)。使用这样的现有数据类型可以使您的生活更加轻松

void显示(标准::向量常量和数组){
对于(size_t i=0;i
<>不是。你可能是使用VisualStudio作为关键字显示的,因为它是用在C++或CLI中的,是一个本地托管类型。但是,这与C++无关,VisualStudio在这方面是误导的。
至于您的问题:您可以简单地传递指向char的指针,然后直接传递嵌套数组(前提是您使用的是动态分配的数组):

也就是说,您的函数假定一个固定的、已知的数组长度和一些其他细节。最好使用嵌套的
std::vector
,或
std::string
(例如)。使用这些现有的数据类型会使您的生活更轻松

void显示(标准::向量常量和数组){
对于(size_t i=0;i
void display(char **a)
然后使用char *p = "Hello"; char *pl = p + 2; // get pointer to middle 'l' char l = *pl; // fetch char o = p[4]; // use array syntax instead
////////////////////////////////////////////

void ReceivedArray(char x[5]){

for (int i=0; i<5; i++ )
cout << x[i];

}

void main(){

char *x = new char[5];

for (int i=0; i<5; i++ )
x[i]='o';

ReceivedArray(x);
getchar();
}


///////////////////////////////////////////////////////////////


For passing 2D arrays (oops! some lines in spanish, sorry!):

(includes: iostream, stdlb, stdio and math)


/////////////////////////////////////////////////

using namespace std;

void ver(int x[][20]){
for(int i=0; i<15; i++)  {
  for(int j=0; j<20; j++) {
   cout<< x[i][j] <<" ";       }
   cout << "\n";        }

}

void cambiar0(int x[][20]){ int n[255];
   for (int i=255; i>=0; i--)
    n[255-i]=i;


for(int i=0; i<15; i++)
  for(int j=0; j<20; j++)
      for(int k=0; k<255; k++)
       if(x[i][j]==n[k])  {
          x[i][j]=k; break;  }  
}

int main(int argc, char* argv[]){
int x[15][20]; char a; 

for(int i=0; i<15; i++)
  for(int j=0; j<20; j++)
   x[i][j]=rand()%255;

  cout << "¿desea ver la matriz? s/n ";
 cin >> a;
 if(a=='s') ver(x);

 cambiar0(x);

 cout << "\n\n";
 cout << "¿desea ver la matriz? s/n ";
 cin >> a;
 if(a=='s') ver(x);

system("PAUSE"); return 0;
}

///////////////////////////////////
char *b = new char[width*height];
char c=b[width*y+x];