数组未正确分配
arrays not being assigned properly
void sort(int* A,int l)
{
int j;
int B[l];
for(int i=0;i<l;i++)
{
j = largest(A,l);
B[l-i-1] = A[j];
A[j] = -1;
}
A = B;
}
int main()
{
.
int C[3] = {x,y,z};
...
sort(C,3);
cout<<C[0]<<C[1];
}
输出即将变为 -1-1但是,如果我们分配 A[0] = B[0] 等等,那么我们就会得到正确的答案。PS:我尝试使用* A = * B,它只给出了第一个元素是正确的。
当你赋值 A = B
时,你重新赋值一个局部变量,该变量保存指向数组第一个元素的指针。此作业不会更改main
中的任何内容。特别是,A
的内容不会受到影响。
完成排序后,必须将所有元素从B
复制到A
:
void sort(int *A, int l)
{
int j;
int B[l];
// sort into temporary array B
for (int i = 0; i < l; i++) {
j = largest(A, l);
B[l - i - 1] = A[j];
A[j] = -1;
}
// copy temporary array B to result array A
for (int i = 0; i < l; i++) A[i] = B[i];
}
但如果你看一下,Amol Bavannavar 基本上是对的:你不必每次都检查整个数组中最大的元素。检查其余元素就足够了。因此,与其为"使用过的"元素分配一个较低的值,不如将最大的元素交换到最后。当你这样做时,你会看到处理的元素在最后,未处理的元素在开头。然后,您可以就地进行排序,而无需临时数组:
void sort2(int *A, int l)
{
while (l) {
int j = largest(A, l--);
int swap = A[j]; A[j] = A[l]; A[l] = swap;
}
}
在您的示例中有许多错误的代码用法,例如:
int B[l];
不能做到,如果你这样做,我必须有一个常量值。
A = B;
将执行浅拷贝而不是深拷贝。您可以在此处看到差异:深拷贝和浅拷贝有什么区别?
cout<<C[0]<<C[1];
将打印连接在一起的数字而不进行解析。
至于如何修复此代码,您可能的目标是实现:
#include <iostream>
using namespace std;
int largest(int* A, int l)
{
int big=-1;
int i;
int index=0;
for(i=0;i<l;i++)
{
if(A[i]>big)
{
big=A[i];
index=i;
}
}
return index;
}
void sort(int* A,int l)
{
int j;
int *B=new int[l];
for(int i=0;i<l;i++)
{
j = largest(A,l);
B[l-i-1] = A[j];
A[j] = -1;
}
for(int i=0;i<l;i++)
{
A[i]=B[i];
}
}
int main()
{
int C[3] = {2,5,1};
sort(C,3);
cout<<C[0]<<" "<<C[1];
return 1;
}
相关文章:
- 将数组的地址分配给变量并删除
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 获取字符串的长度并将其分配给数组
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 使用递归模板动态分配的多维数组
- 如何正确填充在堆上分配的二维数组?
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 在 C++ 中搜索动态分配的数组中的出现次数
- 动态分配的聊天数组打印缺失的数据和空
- 关于字符数组,我正在尝试将数组中的每个字符分配给另一个值
- 我似乎无法为指针分配一个数组,然后更改数组的内容
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 无法分配C++数组
- 如何增加以前由新运算符分配的 C++ std::list 数组的大小?
- 分配 2D 可变大小的数组
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- 动态分配字符数组的内存
- C++具有动态分配的字符数组的结构
- C 通过参考分配 /数组传递内存
- 使用字符串或字符动态分配(数组)