C/C++知识点之C++ 二维数组(双重指针作为函数参数)
小标 2019-01-10 来源 : 阅读 6290 评论 0

摘要:本文主要向大家介绍了 C/C++知识点之C++ 二维数组(双重指针作为函数参数),通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了 C/C++知识点之C++ 二维数组(双重指针作为函数参数),通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

C/C++知识点之C++ 二维数组(双重指针作为函数参数)

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
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/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 9 不喜欢 | 1
看完这篇文章有何感觉?已经有10人表态,90%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程