C++ 当二维数组是一个函数参数时,这两个词之间有什么区别?

C++ 当二维数组是一个函数参数时,这两个词之间有什么区别?,c++,arrays,c++11,C++,Arrays,C++11,当二维数组是一个函数参数时,这两个词之间有什么区别 #include <bits/stdc++.h> #include <windows.h> using namespace std; void dfs(int (*a)[10]){ for(int i=0;i<5;i++){ for(int j=0;j<10;j++){ cout<<a[i][j]<<" "; }

当二维数组是一个函数参数时,这两个词之间有什么区别

#include <bits/stdc++.h>
#include <windows.h>
using namespace std;

void dfs(int (*a)[10]){
    for(int i=0;i<5;i++){
        for(int j=0;j<10;j++){
            cout<<a[i][j]<<" ";
        }
    }
}
void dfs2(int a[][10]){
    for(int i=0;i<5;i++){
        for(int j=0;j<10;j++){
            cout<<a[i][j]<<" ";
        }
    }
}
int main(){

    int (*a)[10]=new int[5][10];
    for(int i=0;i<5;i++){
        for(int j=0;j<10;j++){
            a[i][j]=i*j;
        }
    }
    dfs(a);
    dfs2(a);
    delete []a;
    return 0;
}
#包括
#包括
使用名称空间std;
无效dfs(int(*a)[10]){
对于(int i=0;i
这两个词在使用时有什么区别
二维数组是函数参数吗

没有

这也是为什么如果您尝试为两个函数赋予相同的名称,会出现重新定义错误

然而,
dfs(int(*a)[10])
版本具有更大的教育价值,因为它向您显示数组不能按值传递;当您尝试这样做时,会传递一个指针,而大小信息会丢失。您最终会得到一个指向
int[10]的指针
object,它可能是也可能不是整个
int[10]
s数组的开头

我想知道当阵列非常大时,这是否有效

因为两者没有区别,所以阵列有多大也无关紧要。效率也是一个完全无关的话题



在任何情况下,请删除所有数组内容并使用
std::vector
。不要使用非标准的
头,如果不需要Windows API,也不要使用
。最后,避免
使用命名空间std;

多维矩阵连续有好处。但是
std::array
f
std::array
与原始数组一样,也能做到这一点,而不会带来任何麻烦。@guanjun:我没有说会导致内存泄漏。但是,你说的是,原始动态分配数组很容易导致内存泄漏。这是你想要避免它们的原因之一。