首页 > 代码库 > C++ 二维数组(双重指针作为函数参数)
C++ 二维数组(双重指针作为函数参数)
本文的学习内容参考:http://blog.csdn.net/yunyun1886358/article/details/5659851
http://blog.csdn.net/xudongdong99/article/details/6723163
1.使用二维数组作为形参的例子:
void func(int arr[][10]) { } int main(){ int array[10][10]; func(array); //用二维数组名作为实参,调用函数}
上面的例子可以编译通过,注意,此处一定要给出第二个维度的大小,否则编译无法通过。
2.使用一维指针作为函数参数的形式如下:
void func1(int (*arr)[10]){}int main(){ int array[10][10]; func1(array); }
这种声明方式也是OK的,因为二维数组名就是一个指向一维数组的指针,同样地,这里也必须指明第二维的大小,否则编译无法通过。
3.使用双重指针作为形参的方式:这里的形参指定了二维数组的各维度大小
void func2(int** parr, int m, int n) { } int main() { int m = 10; int n = 10; int** pArray = new int* [m]; pArray[0] = new int[m * n]; // 分配连续内存 // 用pArray[1][0]无法寻址,还需指定下标寻址方式 for(int i = 1; i < m; i++) { pArray[i] = pArray[i-1] + n; } func2(pArray, m, n); }
4.Demo(来自于赛码网)
Question:
有n个格子,从左到右放成一排,编号为1-n。
共有m次操作,有3种操作类型:
1.修改一个格子的权值,
2.求连续一段格子权值和,
3.求连续一段格子的最大值。
对于每个2、3操作输出你所求出的结果。
Input: 输入第一行两个整数,n表示格子个数,m表示操作次数,n和m中间用空格隔开; 接下来输入n行,每行一个整数表示一个格子的权值 接下来输入m行,每行有三个整数,中间用空格隔开;第一个是选择的操作类型1-3,第二和第三个整数是操作格子的编号。 | Input Example: 3 3 7 8 9 2 1 3 3 1 3 2 1 2 |
Output: 若执行1操作则无输出 若执行2和3操作则输出一个整数 | Sample Output: 24 9 15 |
Solution:使用双重指针作为函数形参的例子,该例子中的实参是动态创建的双重指针形式,可以直接作为实参进行传递,如果实参只是普通的二维数组,则在做为实参的时候需要做相应地类型转换。
#include<iostream>using namespace std;//操作结果输出函数void OperatorType(int weight[],int n,int **operatorArr,int m) { int sum = 0; int max=0; switch (operatorArr[m][0]) { case 1: break; case 2: for (int i = operatorArr[m][1];i <= operatorArr[m][2];i++) { sum += weight[i-1]; } cout << sum << endl; break; case 3: for (int i = operatorArr[m][1];i <= operatorArr[m][2];i++) { max = 0.0; if (max < weight[i-1]) max = weight[i-1]; } cout << max << endl; break; default: break; }}int main(){ int n, m; //n表示格子数 m表示操作次数 cin >> n >> m; int *weight = new int[n]; //每个格子的权重 int **oper = new int*[m]; //二维数组存放操作数和格子数的数组 for (int i = 0;i < m;i++) { oper[i] = new int[3]; } for (int i = 0;i < n;i++) //输入格子的权重 { cin >> weight[i]; } for (int i = 0;i < m;i++) //输入操作数组 { for (int j = 0;j < 3;j++) cin >> oper[i][j]; } for (int i = 0;i < m;i++) { OperatorType(weight, n, oper, i); } system("pause"); return 0;}
C++ 二维数组(双重指针作为函数参数)