C++二维数组作为函数参数
将二维数组传递给函数时,形参类型必须包含数的大小声明符,C++ 需要这些信息才能正确地将下标数组引用(如 table[2][1])转换为存列储该元素的内存地址。
下面的程序演示了如何将一个二维数组传递给一个函数。以下是程序中函数 showArmy 的头文件:
图 1 二维数组在内存中的位置示意图
当编译器生成访问二维数组元素的代码时,需要知道行在内存中按多少个字节分隔开来,因此,列数是这个计算中的关键因素。
这个必要的列信息也可以用一个 typedef 声明来提供。以下是一个二维数组的 typedef 声明看起来的样子:
下面的程序演示了如何将一个二维数组传递给一个函数。以下是程序中函数 showArmy 的头文件:
void showArray(const int array [][NUM_COLS], int numRows)
showArray 函数可以接受任何二维整数数组,只要它有 4 列。在程序中,这个函数显示了两个独立数组的内容。// This program demonstrates how to pass // a two-dimensional array to a function. #include <iostream> #include <iomanip> using namespace std; const int NUM_COLS = 4; // Number of columns in each array const int TBL1_R0WS = 3; // Number of rows in table1 const int TBL2_R0WS = 4; // Number of rows in table2 void showArray(const int [][NUM_COLS], int); // Function prototype int main() { int table1[TBL1_R0WS][NUM_COLS] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12} }; int table2[TBL2_R0WS][NUM_COLS] = {{ 10, 20, 30, 40},{ 50, 60, 70, 80},{ 90, 100, 110, 120},{130, 140, 150, 160} }; cout << "The contents of table1 are:\n"; showArray(table1, TBL1_R0WS); cout << "\nThe contents of table2 are:\n"; showArray(table2, TBL2_R0WS); return 0; } void showArray(int const array[][NUM_COLS], int numRows) { for (int row = 0; row < numRows; row++) { for (int col = 0; col < NUM_COLS; col++) { cout << setw (5) << array[row][col] << " "; } cout << endl; } }程序输出结果:
The contents of table1 are:
1 2 3 4
5 6 7 8
9 10 11 12
The contents of table2 are:
10 20 30 40
50 60 70 80
90 100 110 120
130 140 150 160
图 1 二维数组在内存中的位置示意图
当编译器生成访问二维数组元素的代码时,需要知道行在内存中按多少个字节分隔开来,因此,列数是这个计算中的关键因素。
这个必要的列信息也可以用一个 typedef 声明来提供。以下是一个二维数组的 typedef 声明看起来的样子:
typedef int intTable [][4];
该语句使 intTable 成为具有任意行数和 4 列的二维数组的别名。如果这个 typedef 语句已经包含在此程序中,那么 showArray 函数的原型就可以写成如下形式:void showArray(intTable, int);
其函数头则可以写成以下形式:void showArray(intTable array, int numRows)
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算