题目:给定一个数组名字,如何根据数组名求数组的长度?
本题来自于一个同学笔试题,笔试中是实现一个冒泡排序,但是排序的参数只有一个数组名,没有数组中元素的个数;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]));}