马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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);
|