|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include<iostream>
- using namespace std;
- //交换函数
- template <class T>
- void mySwap(T& a, T& b)
- {
- T temp = a;
- a = b;
- b = temp;
- }
- //打印函数
- template <class T>
- void print(T arr[], int len)
- {
- for (int i = 0; i < len; i++)
- {
- cout << arr[i] << " ";
- }
- cout << endl;
- }
- //获取长度函数
- template <class T>
- int get_len(T arr[])
- {
- return (sizeof(arr) / sizeof(T));
- }
- //排序函数 (选择排序)
- template <class T>
- void myRank(T arr[], int len)
- {
- for (int i = 0; i < len; i++)
- {
- int min = i;
- for (int j = i + 1; j < len; j++)
- {
- if (arr[min] > arr[j])
- {
- min = j;
- }
- }
- if (min != i)
- {
- mySwap(arr[min], arr[i]);
- }
- }
- print(arr, len);
- }
- void test01()
- {
- char charArr[] = "bdcfeagh";
- int len = get_len(charArr);
- cout << len << endl;
- myRank(charArr, len);
- }
- void test02()
- {
- int intArr[] = { 7, 5, 8, 1, 3, 9, 2, 4, 6 };
- int len = get_len(intArr);
- cout << len << endl;
- myRank(intArr, len);
- }
- int main()
- {
- test01();
- test02();
- system("pause");
- return 0;
- }
复制代码
输出结果:
- 4
- b c d f
- 1
- 7
- 请按任意键继续. . .
复制代码
这是我写的一个给数组内元素升序排列的程序,期待的输出结果是:
- 9
- a b c d e f g h
- 9
- 1 2 3 4 5 6 7 8 9
- 请按任意键继续. . .
复制代码
现在我只知道问题出在了函数get_len()这里,但是不知道具体原理是什么,求各位大佬解答
原因是 数组作为参数传递到函数里它就变成了指针。
指针是不能用sizeof()求出其指向的数组长度的。
在32位系统中,指针的长度固定是4字节,所以你的 test01()函数里求出的 len 是 4/1 = 4
而test02()函数里求出的 len 是 4/4 =1
如果是64位系统,指针的长度固定是8字节。
所以不能用 get_len 这样的函数去求数组的长度
不用函数直接写就可以了 。
- void test01()
- {
- char charArr[] = "bdcfeagh";
- int len = sizeof(charAr)/sizeof(char);
- cout << len << endl;
- myRank(charArr, len);
- }
- void test02()
- {
- int intArr[] = { 7, 5, 8, 1, 3, 9, 2, 4, 6 };
- int len = sizeof(intArr)/(int);
- cout << len << endl;
- myRank(intArr, len);
- }
复制代码
如果觉得一定要写个啥更高大上一点,可以用宏
- #define _GET_LEN(obj,t) (sizeof(obj)/sizeof(t))
- int len = _GET_LEN(charArr,char);
- int len = _GET_LEN(intArr,int);
复制代码
|
|