给定一个数组,根据数组名求数组的长度

题目:给定一个数组名字,如何根据数组名求数组的长度?

本题来自于一个同学笔试题,笔试中是实现一个冒泡排序,但是排序的参数只有一个数组名,没有数组中元素的个数;void bubbleSort(int a[]);

思路:要先实现这个冒泡排序,首先要获取这个数组中数组元素的个数。然后对数组排序,下面说一下如何根据数组名获取一个数组长度。


首先我们如果在局部作用域中定义一个数组的话,获取数组中元素个数是很方便的:

int main(int argc, char * argv[])
 {
	int a[11];
	for (int i = 0; i < 10; ++i)
	{
		a[i] = i;
	}
	int len = 0;
	len = (sizeof(array) / sizeof(array[0]));
	cout << len << endl;
	return 0;
}





//但是将数组名作为参数传递到一个函数中,这样这个数组名就退化成了一个简单的指针int*,此时sizoef(a)的值为4,显然这种方法不能获取数组的长度。

但在C++中可以使用模板技术可以实现:

template <class T>
int getArrayLen(T& array)
{
	return (sizeof(array) / sizeof(array[0]));
}

int main(int argc, char * argv[])
 {
	int a[11];
	for (int i = 0; i < 10; ++i)
	{
		a[i] = i;
	}
	int len = 0;
	cout << getArrayLen(a) << endl;
	return 0;
}


//在C语言中可以使用宏定义来求:

#define getSize(a, len){len = (sizeof(a) / sizeof(a[0]));}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值