我正在尝试使用指针对数组进行排序。这就是我到目前为止所拥有的。这几乎就是教科书中的例子,尽管文中的例子不包括
std :: copy(net,net + SIZE,net2);
void pointer(void) {
int j,i;
std::copy(net, net+SIZE, net2);
//int *p[SIZE];
float temp;
int sortedflag=0;
//for (i=0;i<SIZE;i++) net2[i]=net+i;
for(i=0;i<SIZE;i++)cout<<*net2[i]<<"";
while (!sortedflag){
sortedflag=1;
for(j=0;j<SIZE-1;j++){
if(*net2[j]>*net2[j+i]){
temp=net2[j];
net2[j]=net2[j+1];
net2[j+1]=temp;
sortedflag=0;
}
}
}
完整代码
我一直得到的错误是
无法将float转换为* float
我明白为什么会这样,但我完全迷失了解决方案。过去一周我一直在网上寻找解决方案。
如果你能解释指针的实际用途,也可以获得奖励积分。这几乎肯定是经验不足,但似乎指针使程序变得不必要地复杂且不太安全。
答案 0 :(得分:1)
float temp
应该阅读float *temp
- 您需要临时存储指针,而不是float
。
你是对的,在这个例子中使用指针没什么意义。假设您正在尝试对非常大的对象进行排序;对那些物品进行洗牌会花费更多的时间,而不是将指针拖到它们上面。
指针有很多用途(理想情况下是智能类型 - shared_ptr
,unique_ptr
等)。人们常说,只是部分地开玩笑说,计算机科学中没有任何问题无法通过另一个间接层次来解决,而指针是实现这种间接的一种方式。
答案 1 :(得分:0)
详细说明Alan关于改组的评论,例如采用像Merge Sort这样的排序算法。
通常,合并排序使用您要排序的数组副本来帮助合并过程。但是有指针,例如链接列表实现,您可以合并排序所有数据,而无需将其带入程序(进程)使用的内存中。
或者,例如在计算机上移动文件。您的文件系统(很可能)只更改指向硬盘上该文件的指针,它不会实际移动它。
(我知道这不是一个直接的编程示例,但希望它能更清晰地指出整个指针的概念,因为它是理解编程的巨大的方面。)
我没有必要的评论要点,所以我希望你能原谅这篇帖子作为答案。