C/C++数组作为函数参数使用方法总结
一维数组作为函数参数的三种方法:
方法1:形参与实参都用数组;
方法2:形参与实参都用对应数组的指针;
方法3:实参用数组名,形参用引用;
二维数组作为函数参数的四种方法:
C/C++语言中把二维数组看作1个特殊的一维数组,它的数组元素又是1个一维数组。二维数组的存储也是按照一维数组来处理的,二维数组按照行展开的方式按顺序存储;所以在利用二维数组作为参数传递时,必须指定二维数组的列数,否则函数无法勾画出二维数组的组织形式。只有有了列长度,通过下标array2D[i][j]时才能得到正确的下标地址。
方法1:在参数声明中指定二维数组的列数;
方法2:把参数声明为一个指向数组的指针;
方法3:把参数声明为指向指针的指针;
方法4:二维数组看成一维数组访问;
//一维数组作为函数参数的三种方法:
#include "iostream"
using namespace std;
//用类型定义语句定义一个int型的数组类型
typedef int arrayD[6];
//方法1:形参与实参都用数组
/*下面这两种写法等价,这里的数字“6”并没有什么卵用*/
void print1DArraay1(int array1D[], const int length );
void print1DArraay11(int array1D[6], const int length);
//方法2:形参与实参都用对应数组的指针
void print1DArraay2(int *array1D, const int length);
//注:方法1与方法2等价
//方法3:实参用数组名,形参用引用;
/*C++中经常使用这种调用方式;下面是等价的两种写法*/
void print1DArraay3(arrayD &array1D, const int length);
void print1DArraay32(int(&array1D)[6], const int length);
int main()
{
int array1D[6] = {0,1,2,3,4,5};
print1DArraay1(array1D, 6);
print1DArraay2(array1D, 6);
print1DArraay3(array1D, 6);
print1DArraay32(array1D, 6);
system("pause");
return 0;
}
void print1DArraay1(int array1D[], const int length)
{
for (int i = 0; i < length; i++)
{
printf("array1D[%d] = %d\n", i, array1D[i]);
}
}
void print1DArraay2(int *array1D, const int length)
{
for (int i = 0; i < length; i++)
{
printf("array1D[%d] = %d\n", i, *(array1D+i));
}
}
void print1DArraay3(arrayD &array1D, const int length)
{
for (int i = 0; i < length; i++)
{
printf("array1D[%d] = %d\n", i, array1D[i]);
}
}
void print1DArraay32(int(&array1D)[6], const int length)
{
for (int i = 0; i < length; i++)
{
printf("array1D[%d] = %d\n", i, array1D[i]);
}
}
//二维数组作为函数参数的四种方法:
#include <iostream>
using namespace std;
//方法1:在参数声明中指定二维数组的列数
//srcData的声明看起来是一个二维数组,实际上形参是指向含有6个int的数组指针
void print2Darray1(int srcData[][6],const int rows, const int cols);
//方法2:把参数声明为一个指向数组的指针
//srcData指向数组的首元素,该数组由6个整数构成;所以方法1与方法2等价*/
void print2Darray2(int (*srcData)[6], const int rows, const int cols);
//方法3:把参数声明为指向指针的指针
void print2Darray3(int **srcData, const int rows, const int cols);
//方法4:二维数组看成一维数组访问
void print2Darray4(int *srcData, const int rows, const int cols);
int main()
{
int array2D[2][6] = { { 0, 1, 2, 3, 4, 5 },{ 6, 7, 8, 9, 10, 11 } };
//定义一个指针数组
int *p[2] = { array2D[0],array2D[1] };
print2Darray1(array2D, 2, 6);
print2Darray2(array2D, 2, 6);
print2Darray3(p, 2, 6);
print2Darray4(array2D[0], 2, 6);
system("pause");
return 0;
}
void print2Darray1(int srcData[][6], const int rows, const int cols)
{
for (int row = 0; row < rows;row++)
{
for (int col = 0; col < cols; col++)
{
printf("srcData[%d][%d] = %d\n",row,col, srcData[row][col]);
}
}
}
void print2Darray2(int (*srcData)[6], const int rows, const int cols)
{
for (int row = 0; row < rows; row++)
{
for (int col = 0; col < cols; col++)
{
printf("srcData[%d][%d] = %d\n", row, col, srcData[row][col]);
}
}
}
void print2Darray3(int **srcData, const int rows, const int cols)
{
for (int row = 0; row < rows; row++)
{
for (int col = 0; col < cols; col++)
{
printf("srcData[%d][%d] = %d\n", row, col, srcData[row][col]);
}
}
}
void print2Darray4(int *srcData, const int rows, const int cols)
{
for (int row = 0; row < rows; row++)
{
for (int col = 0; col < cols; col++)
{
printf("srcData[%d] = %d\n", (row*cols + col), srcData[row*cols + col]);
}
}
}