C++中动态、静态二维数组指针做函数参数的用法

1、二维静态数组指针:

int arr[3][2] = {
    
    {
    
    1,2},{
    
    3,4},{
    
    5,6}};
调用函数定义方式:
int func1( int (*arr)[2],  int size ){
    
     // size表示数组的大小,应是3
	arr[1][1] = 5;...
}int sum( int arr[][2] , int size ){
    
    ...} //2必须指定

arr是一个数组名,该数组有3个元素,第一个元素本身又是一个数组,有2个int 值组成。因此,arr的类型是指向2个int组成的数组的指针

2、二维动态数组指针:
2.1、不利用vector管理内存:

int rowNum = 3;
int colNum = 2;
int **arr= new int*[rowNum]; //定义指针数组的指针(二级指针)
for(int i = 0; i < rowNum; ++i)
    ary[i] = new int[colNum];
调用函数定义方式:
void func1(int **arr,int rowNum,int coluNum){
    
    
	arr[1][0] = 1;
}
内存释放方式:
for(int i=0;i<rowNum;i++)
{
    
    
     delete[] p[i];
}
delete []p;

2.2、利用vector管理内存:

int rowNum = 3;
int colNum = 2;
vector<vector<int>> arr(rowNum,vector<int>(colNum));
调用函数定义方式:
void func1(vector<vector<int>>& arr) {
    
    
	cout << arr[0][1] << endl;
}

参考资料:
1、【C++】二维静态数组是怎么通过指针进行传递?
2、C++二维动态数组(指针)做参数

总结:

1、使用栈内存,数组大小需要提前已知,且数组指针定义麻烦,不方便。
2、使用动态内存,数组大小可以通过变量定义,但二级指针记忆困难且需要主动释放内存,不方便。
3、使用vector,函数传递引用,数组大小可变,自动释放内存。

猜你喜欢

转载自blog.csdn.net/qq_33726635/article/details/106042079