亲爱的,我试图将动态数组作为参数发送给 C++ 中的函数,但它告诉我变量 N 脱离上下文或未定义的错误,我该如何解决这个错误?敬请关注。问候。
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
void generarArreglo(int matriz[n][n]){
srand(time(NULL));
for(int i=0;i<=6;i++){
for(int j=0;j<=6;j++){
matriz[i][j]=rand()%99+1;
}
}
}
void imprimirArreglo(int matriz[n][n]){
for(int i=0;i<=6;i++){
for(int j=0;j<=6;j++){
cout<<matriz[i][j]<<"\t";
}
cout<<endl;
}
}
int main(){
int n;
cin >> n;
int matriz[n][n];
generarArreglo(matriz);
imprimirArreglo(matriz);
system("pause");
return 0;
}
我的解决方案:
入口:
离开:
错误发生在这里:
原因是
n
这些功能不存在。如果它是编译时已知的常量值,您可以修补代码,以便:但事实并非如此。正如您已经提出了使用基于双指针的数组的解决方案,我提出了一个类似的解决方案,使用简单的指针......或使用单个向量。使用 STL 容器的优点是可以避免处理堆内存,这通常是一个很大的缓解:
使用单指针也可以实现同样的效果……相对于双指针的优势基本上有两个:
带有简单指针的示例:
你的代码
在 C++ 中无效。数组的维度必须是常量,而不是变量。您必须将其声明为指针,并动态分配内存:
当然,您将不得不修改所有功能。
编辑
要通过指针访问,它是相同的(我敢肯定在 C 中,如果在 C++ 中没有发生同样的情况,我肯定会把我扔给狼):
如果您使用普通C而不是丑陋和肮脏的C++ ,您可以使用变量来声明数组(在 C11 中)。
在C中, a
array
和 apuntero
是等价的。如果您声明 aarray[]
,编译器会为指定的大小分配内存,而您实际使用的是指向该内存的指针。编辑 2
你为什么使用 2
for
嵌套?你用什么返回的和
array
内存块等在内存中是连续的。简单地说,想象它是一维的,但要长得多。calloc()
malloc()
array[]
编辑 3
从您的评论中,我看到您想学习。
1.0 版。支持补丁。
PS - 对于这样的代码,C / C++据说是只写的。
我建议以以下形式声明数组:
只是作为一个好的做法,因为如果是动态声明的,虽然这是自动完成的,但建议最后手动释放向系统请求的内存,但是,这样就没有必要了。我建议的另一件事是,通过将数组作为参数作为指针+维度传递,如果我们想对其维度进行后续更改,这使得在使用数组时更加灵活。