C语言数组作为函数的参数

  C语言的数组是一系列数据的集合,无法通过参数将它们一次性传递到函数内部,如果数组作为函数的参数,必须传递数组指针。

void func(int *p, int n) //对数组进行冒泡排序
{
	int temp;
	for(i = 0; i < n-1; i++)
	{
		for(j = 0; j < n -i -1; j++)
		{
			if(p[j]>p[j+1])
			{
				temp = p[j];
				p[j] = p[j+1];
				p[j+1] = temp;
			}
		}
	}
	for(i = 0; i < n; i++)
	{
		printf("%d\n", p[i]); 
	}
}

int main() 
{
	int a[10] = {3, 6, 1, 8, 7, 0, 4, 9, 2, 5};
	func(a, 10);
	return 0;
}

运行结果为:

0
1
2
3
4
5
6
7
8
9

  此程序中,func函数的参数 *p 仅仅是一个int型指针,在函数内部无法通过这个指针获得数组长度,必须将数组长度作为函数参数传递到函数内部,于是就有了第二个参数 n
  数组做函数参数时,参数也能够以“真正”的数组形式给出。func函数的函数头可以写成下面的形式:

void func(int p[], int n)

或者

void func(int p[10], int n)

  上面的两个例子,好像定义了一个数组,甚至元素个数都加进去了,实际上这两种形式的数组定义都是假象。两者都不会创建一个数组出来,最终还是会转换为指针*p。
  int p[10]这种形式只能说明函数期望用户传递的数组有 10个元素,并不意味着数组只能有 10 个元素,真正传递的数组可以有少于或多于10 个的元素。
  参数的传递本质上是一次赋值的过程,赋值就是对内存进行拷贝。而数组中数据的数量没有限制,可能非常多,对它们进行内存拷贝有可能是一个漫长的过程,会严重拖慢程序的效率,为了规避上述情况,C语言没有从语法上支持数据集合的直接赋值。

  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值