本文的学习内容参考:http://blog.csdn.net/yunyun1886358/article/details/5659851

http://blog.csdn.net/xudongdong99/article/details/6723163

1.使用二维数组作为形参的例子:

void func(int arr[][])
{ }
int main()
{
int array[][];
func(array); //用二维数组名作为实参,调用函数
}

上面的例子可以编译通过,注意,此处一定要给出第二个维度的大小,否则编译无法通过。

2.使用一维指针作为函数参数的形式如下:

void func1(int (*arr)[])
{ }
int main()
{
int array[][];
func1(array);
}

这种声明方式也是OK的,因为二维数组名就是一个指向一维数组的指针,同样地,这里也必须指明第二维的大小,否则编译无法通过。

3.使用双重指针作为形参的方式:这里的形参指定了二维数组的各维度大小

void func2(int** parr, int m, int n)
{ }
int main()
{
int m = ;
int n = ;
int** pArray = new int* [m];
pArray[] = new int[m * n];   // 分配连续内存
// 用pArray[1][0]无法寻址,还需指定下标寻址方式
for(int i = ; i < m; i++)
{
pArray[i] = pArray[i-] + 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 = ;
int max=;
switch (operatorArr[m][])
{
case :
break;
case :
for (int i = operatorArr[m][];i <= operatorArr[m][];i++)
{ sum += weight[i-];
}
cout << sum << endl;
break;
case : for (int i = operatorArr[m][];i <= operatorArr[m][];i++)
{
max = 0.0;
if (max < weight[i-])
max = weight[i-];
}
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 = ;i < m;i++)
{
oper[i] = new int[];
}
for (int i = ;i < n;i++) //输入格子的权重
{
cin >> weight[i];
}
for (int i = ;i < m;i++) //输入操作数组
{
for (int j = ;j < ;j++)
cin >> oper[i][j];
}
for (int i = ;i < m;i++)
{
OperatorType(weight, n, oper, i);
}
system("pause");
return ;
}

C++ 二维数组(双重指针作为函数参数)的更多相关文章

  1. C++二维数组(指针)做参数

    一.问题描述 使用C++编程过程中经常需要使用到二维数组,然而初级程序员在使用过程中经常会出错使程序崩溃.下面就二维指针的定义,初始化,以及二维指针做参数给出简单介绍. 1.二维数组的定义与初始化 在 ...

  2. 关于c语言二维数组与指针的个人理解及处理办法。

    相信大家在学习C语言时,对一维数组和指针的理解应该是自信的,但是,我在学习过程中,看到网上一些博文,发现即便是参加工作的一些专业编程人员,突然碰到二维数组和指针的问题时,也可能会遇到难以处理的诡异问题 ...

  3. C指针 指针和数组 二维数组的指针 指针应用

    直接到变量名标识的存储单元中读取变量的值--直接寻址 通过其他变量间接找到变量的地址读取变量的值--间接寻址 指针变量存放地址 显示变量的地址 指针变量使用前必须初始化,若不知指向哪,可先指向NULL ...

  4. C++笔记-数组指针/二维数组转换指针

    参考资料: 1. 作者 BensonLaur  :https://www.cnblogs.com/BensonLaur/p/6367077.html 2. https://blog.csdn.net/ ...

  5. C语言 二维数组(指针)动态分配和释放(转)

    C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按 ...

  6. 二维数组和指针(C语言)

    二维数组和指针 二维数组和指针1.二维数组和数组元素的地址若有以下定义:int *p, a[3][4]; 1)二维数组a由若干个一维数组组成在C语言中定义的二维数组实际上是一个一维数组,这个一维数组的 ...

  7. PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?

    如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组' ...

  8. C语言教学--二维数组和指针的理解

    对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...

  9. c语言编程-----指向二维数组的指针

    c中如何返回一个指向二维数组的指针 #include <stdio.h> #include <stdlib.h> #define COUNT 3 typedef int (*M ...

  10. C/C++——二维数组与指针、指针数组、数组指针(行指针)、二级指针的用法

    本文转载自:https://blog.csdn.net/qq_33573235/article/details/79530792 1. 二维数组和指针 要用指针处理二维数组,首先要解决从存储的角度对二 ...

随机推荐

  1. CentOS下系统时间同步和时区的修改和设置(用的这个)

    一.修正时区 rm -rf /etc/localtime #删除当前默认时区www.kwx.gd ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localt ...

  2. iOS 强制横屏

    // // AAAAViewController.m // hengp // // Created by 朱信磊 on 15/2/13. // Copyright (c) 2015年 niit. Al ...

  3. [RxJS] ReplaySubject

    A ReplaySubject caches its values and re-emits them to any Observer that subscrubes late to it. Unli ...

  4. pomelo组件..

    1.pomelo会加载lib/components目录下的组件.并设置为属性..和存储在Pomelo.components中..注意这里其实存储的是对象的构造函数.. function load() ...

  5. 学习笔记之SQL

    --------参考网站-------- http://en.wikipedia.org/wiki/SQL SQL@Wiki http://en.wikipedia.org/wiki/Delete_% ...

  6. java跨平台性分析

    实不相瞒,Java是我见过的执行效率最低的程序设计语言,前不久在CSDN论坛上有个评测,计算9999的阶乘,同样的循环算法,Java的耗时是.NET的5倍.我以前很喜欢Serv-U,自从它用Java重 ...

  7. JForum 2.19源码部署到eclipse

    前两天在研究免费论坛,通过oschina和相关的文档查阅,最终选择了jforum,首先他是java写的,其次方便二次开发,而且有些论坛的源码都已经不在维护了,jforum最近几个月还是有更新的,但是从 ...

  8. 如何取消tableView的footer的粘滞效果

    footer默认的是固定在底部的  但有时我们需要和view一起滚动 主要是在scrollViewDidScroll这个代理方法中监听滚动的状况 设置如下 - (void)scrollViewDidS ...

  9. jquery通过ajax方法获取json数据不执行success回调

    问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准写法,导致总是执行error回调方法 解决方案:使json格式务必符合下述 ...

  10. [转]ORACLE日期时间函数大全

    本文转自:http://www.cnblogs.com/chuncn/archive/2009/04/29/1381282.html ORACLE日期时间函数大全 TO_DATE格式(以时间: ::2 ...