首页 > 其他分享 >二维数组的声明及其作为函数参数的方式

二维数组的声明及其作为函数参数的方式

时间:2023-02-25 20:58:03浏览次数:53  
标签:... Outputting int dynamic 函数参数 二维 数组 output array

◆ 概要

本文以 3 行 2 列的二维数组为例,介绍了如何声明自动存储、静态存储和动态存储的二维数组,及其如何将它们作为函数参数进行传递的方式。

◆ 实现

处理自动存储或静态存储的二维数组,

...	

// Assigning to auto or static array.
void assign(int row, int (*array)[2]);

// Outputting auto or static array.
void output(int (*array)[2], int row);

...	

int staticarray[3][2];        // #1


int main() {

    assign(3, staticarray);        // #2

    int autoarray[3][2];        // #1

    assign(3, autoarray);        // #2

	...	

    std::printf("Outputting static array...\n");
    output(staticarray, 3);        // #2


    std::printf("Outputting auto array...\n");
    output(autoarray, 3);        // #2

	...	

}

在声明时,需在数组名后指定维数的大小(#1)。将它们传递给函数时,需要把行数和数组名传递给函数(#2)。

处理动态存储的二维数组,

...

// Assigning to dynamic array.
void assign(int row, int column, int** array);

// Outputting dynamic array.
void output(int** array, int row, int column);

...

int main() {

    ...
    	
    int** dynamicarray1 = new int*[3];
    for (int i = 0; i < 3; ++i) dynamicarray1[i] = new int[2];    // #1

    assign(3, 2, dynamicarray1);        // #3


    int** dynamicarray2 = new int*[3];
    int* data = new int[3*2];            // #2
    for (int i = 0; i < 3; ++i) dynamicarray2[i] = data + 2 * i;

    assign(3, 2, dynamicarray2);        // #3

    
    std::printf("Outputting dynamic array 1...\n");
    output(dynamicarray1, 3, 2);        // #3


    std::printf("Outputting dynamic array 2...\n");
    output(dynamicarray2, 3, 2);        // #3
    
    ...

}

在声明时,可以考虑两种方法。方法一(#1),逐行分配内存,不保证各行间的内存连续;方法二(#2),一次分配全部内存,保证各行间的内存连续。将它们传递给函数时,需要把行数、列数和数组名传递给函数(#3)。

◆ 验证

编译代码(-std=c++11)成功后运行可执行文件。以下是执行结果的输出,

Outputting static array...
  1   2
  2   4
  3   6
Outputting auto array...
  1   2
  2   4
  3   6
Outputting dynamic array 1...
  1   2
  2   4
  3   6
Outputting dynamic array 2...
  1   2
  2   4
  3   6

◆ 最后

完整示例代码请参考 [gitee] cnblogs/17155320

标签:...,Outputting,int,dynamic,函数参数,二维,数组,output,array
From: https://www.cnblogs.com/green-cnblogs/p/17155320.html

相关文章

  • 数组和指针
    一维数组和指针先回忆一下,数组是由一系列类型相同的元素组成。如:charch[4];/*4个字符的数组*/intin[4];/*4个整数的数组*/floatfl[4];/*4个浮点数的数......
  • 后缀数组做题笔记
    后缀数组笔记这里挂一个学弟学习笔记的链接:Link,大部分内容都学习自这里。按道理这篇文章会持续更新1.Preface​ 首先有几个概念需要明确。本文中所有字符串下标从\(1......
  • 二维字符数组
    当有多个字符串时,可以使用二维字符数组例如:chararr[3][128]={"hello","world","hehehe"};二维字符数组的遍历 ......
  • 数组
    1.返回一个数组中最大子数组的和要求:输入一个整形数组,数组里有正也有负数      数组中连续的一个或多个数组组成一个子数组,每个子数组都有一个和   ......
  • C++-4 数组
                   ......
  • C语言旋转数组-转圈打印数组
    //旋转数组voidrotateArray(size_trows,size_tcols,size_tarr[4][4]){size_trotated[rows][cols];for(size_ti=0;i<rows;i++){for(size......
  • for in (var key in Obj)遍历JS对象/数组
    这个方法还可以遍历数组,就放在一起写了。letresult=function(obj){for(letkeyinobj){returnfalse;//若不为空,可遍历,返回false}returntrue;}conso......
  • 一维字符数组的操作
    键盘获取字符数组scanf和%s获取字符串,遇到空格或回车,结束输入gets函数获取带空格的字符串(不推荐使用)gets函数可以获取带空格的字符串,但是不会获取......
  • java202302java学习笔记第十一天-二维数组2
     ......
  • Lua字节数组与float互转
    纪念那些在双流工厂奋斗的日夜,防爆表屏项目是一次很成功的实践,包括设计的页面堆栈和跳转机制历史回退机制页面密码保护机制 串口分包机制,运用综合所学来搭建的屏上独......