【c++】将2维数组作为形式参数传入,可以吗

来源:百度知道 编辑:UC知道 时间:2024/05/12 17:36:31
如题:
//函数申明
fun(int *arr)
{
....
}

main{
int ** intArr = new int*[2]();
intArr[0] = new int[10];
intArr[1] = new int[10];
...
fun(intArr[0]);//*****
}

问题:
不知上面的***处的调用是否“合法,会造成内存泄露么
}

数组名就是一个指针,调用没有语法问题

是否有内存泄漏或者其他非法操作内存错误,主要看函数的具体实现

C++可以传数组,你加上引用,不过这会导致值复制,这不是C语言推荐的风格。因为C++继承了C语言的语法,所以在此Γ?吹氖荂的语法。
void f(int a[3]){//会被转换成int *a
//sizeof(a)也和sizeof(int *)一样
...
}
但如果:
void f(int (&a)[3]){...
就会传数组,它是对整个数组的引用。因为顶层类型不是数组了,所以不会被转换成指针。
看看C语言的一些书,就会知道,ANSI C,传参的
type [l][m][n]...会被转换成type (*)[m][n]。但是C++中,type (&)[l][m][n],不会被转换,因为其第一层是&而不是[]。
一般如果main里分配的话,你就在main里回收,而fun里只是对这片地址操作。如果你不在fun里free(delete),那么最大的问题不会是泄漏,而是越界。你可以访问数组下一个单元的位置,但是它的值已经是结尾了,不是数组元素。至于下两个单元,C中没有定义,可能会出未知的问题。