牛骨文教育服务平台(让学习变的简单)
博文笔记

C语言传递数组给函数的方式

创建时间:2014-03-29 投稿人: 浏览次数:2240

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;
	}
}



 


 

 

 

 

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。