1.传递一维数组 int a[10] 给函数,会隐式转换成指向数组首元素的指针,实质上传递的是指向数组首元素的指针(存放的值是数组首元素的地址,指向的数据是数组首元素)。
在使用a值时,可以把a看成是一个指向首元素的指针。但是如果取a的地址,一定要把a看成是一个数组整体。
&a是指向数组的指针。(其实数组变量a代表的是一个数组,但它的值是数组首元素的地址,有別于一般的变量)
//打印一维数组a[n]
void PrintLinearArray(int a[], const int n)
{
for(int i=0; i<n; ++i)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
//打印一维数组p[n]
void PrintLinearArray(int* p, const int n)
{
for(int i=0; i<n; ++i)
{
cout<<p[i]<<" ";
}
cout<<endl;
}
2.传递二维数组 int a[10][8],会隐式转换成指向数组a[0]的指针,a[0]可以看成是一个一维数组,由8个int元素组成。
实质上传递的是指向a[0]的指针(存放的值是a[0]的地址,指向的数据是a[0]。注意a[0]是一个一维数组,且a[0]的值是a[0][0]的地址)(这些是站在语法规则角度上说的)
方式一:形参给出第二维的长度
//打印二维数组a[n][8]
void PrintTwoDimensionalArray(int a[][8], const int n)
{
for(int i=0; i<n; ++i)
{
for(int j=0; j<8; ++j)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
方式二:形参声明为指向数组的指针
//打印二维数组a[n][8]
void PrintTwoDimensionalArray(int (*a)[8], const int n)
{
for(int i=0; i<n; ++i)
{
for(int j=0; j<8; ++j)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
方式三:形参声明为指针,二维数组在底层实质上是一块连续的内存,每一小块存放的是整数数据
//打印二维数组a[low][column]
void PrintTwoDimensionalArray(int* pElem, const int low, const int column)
{
for(int i=0; i<low; ++i)
{
for(int j=0; j<column; ++j)
{
cout<<pElem[i*column+j]<<" ";
}
cout<<endl;
}
}