C++ 二维数组(双重指针作为函数参数)
本文的学习内容参考: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++ 二维数组(双重指针作为函数参数)的更多相关文章
- C++二维数组(指针)做参数
一.问题描述 使用C++编程过程中经常需要使用到二维数组,然而初级程序员在使用过程中经常会出错使程序崩溃.下面就二维指针的定义,初始化,以及二维指针做参数给出简单介绍. 1.二维数组的定义与初始化 在 ...
- 关于c语言二维数组与指针的个人理解及处理办法。
相信大家在学习C语言时,对一维数组和指针的理解应该是自信的,但是,我在学习过程中,看到网上一些博文,发现即便是参加工作的一些专业编程人员,突然碰到二维数组和指针的问题时,也可能会遇到难以处理的诡异问题 ...
- C指针 指针和数组 二维数组的指针 指针应用
直接到变量名标识的存储单元中读取变量的值--直接寻址 通过其他变量间接找到变量的地址读取变量的值--间接寻址 指针变量存放地址 显示变量的地址 指针变量使用前必须初始化,若不知指向哪,可先指向NULL ...
- C++笔记-数组指针/二维数组转换指针
参考资料: 1. 作者 BensonLaur :https://www.cnblogs.com/BensonLaur/p/6367077.html 2. https://blog.csdn.net/ ...
- C语言 二维数组(指针)动态分配和释放(转)
C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按 ...
- 二维数组和指针(C语言)
二维数组和指针 二维数组和指针1.二维数组和数组元素的地址若有以下定义:int *p, a[3][4]; 1)二维数组a由若干个一维数组组成在C语言中定义的二维数组实际上是一个一维数组,这个一维数组的 ...
- PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?
如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组' ...
- C语言教学--二维数组和指针的理解
对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...
- c语言编程-----指向二维数组的指针
c中如何返回一个指向二维数组的指针 #include <stdio.h> #include <stdlib.h> #define COUNT 3 typedef int (*M ...
- C/C++——二维数组与指针、指针数组、数组指针(行指针)、二级指针的用法
本文转载自:https://blog.csdn.net/qq_33573235/article/details/79530792 1. 二维数组和指针 要用指针处理二维数组,首先要解决从存储的角度对二 ...
随机推荐
- C++学习笔记(十二):类继承、虚函数、纯虚函数、抽象类和嵌套类
类继承 在C++类继承中,一个派生类可以从一个基类派生,也可以从多个基类派生. 从一个基类派生的继承称为单继承:从多个基类派生的继承称为多继承. //单继承的定义 class B:public A { ...
- (JAVA版)冒泡排序
核心代码: public void bubbleSort(){ ;i<length-;i++){ ;j<length-i-;j++){ ]) swap(j,j+); } } } publi ...
- 单点登录系统CAS筹建及取得更多用户信息的实现
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- cocos2d-x之蒙板,局部高亮可点,CCRenderTexture
转自:http://www.2cto.com/kf/201207/144656.html 蒙板,局部高亮可点的用处大多是在新手引导的时候,引导玩家一步一步的走游戏的操作流程. 之前写了一个cocos2 ...
- nape.dynamics.InteractionGroup
(转载http://tomyail.com/blog/1123) 说明: Filter只是Shape的属性,Nape为Interactor类提供了group属性,这个属性是一个InteractionG ...
- C#-设置label的字体颜色和大小
在进行label的设置的过程中,常常会遇到需要设定label的字体颜色和字体的大小,这就需要用到label的属性:
- iOS开发——图形编程Swift篇&CAShapeLayer实现圆形图片加载动画
CAShapeLayer实现圆形图片加载动画 几个星期之前,Michael Villar在Motion试验中创建一个非常有趣的加载动画. 下面的GIF图片展示这个加载动画,它将一个圆形进度指示器和圆形 ...
- Golang-interface(四 反射)
github:https://github.com/ZhangzheBJUT/blog/blob/master/reflect.md 一 反射的规则 反射是程序执行时检查其所拥有的结构.尤其是类型的一 ...
- C++如何用system命令获取文件夹下所有文件名
http://www.cplusplus.com/reference/cstdlib/system/ http://bbs.csdn.net/topics/30068943 #include < ...
- PAT 1012
1012. The Best Rank (25) To evaluate the performance of our first year CS majored students, we consi ...