gpt4 book ai didi

c++ - C++中的指针数组排序算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:28 26 4
gpt4 key购买 nike

希望我能得到一些关于我所做的排序方法的建议。

这只是对我正在制作的另一个程序的测试,这个测试有一个我无法弄清楚的错误。这段代码的目的是创建一个 int 指针数组,并根据常规 int 数组的内容对该数组中的指针进行排序。

该错误是针对我的第二个 for 循环的,它不允许我使用 j!=-1,因此不允许我对数组的第一个元素进行排序。请帮忙。谢谢!!

 //create array
int c[8] = {3,1,5,7,8,2,6,4};
//create pointer array
int *newptr[8];
for(int k = 0; k<8; k++)
{
newptr[k] = &c[k];
}
//sort pointer array
for(int j = 0; j<8; j++)
{
cout << "test1\n\n";
cout << *newptr[j] << "and" << *newptr[j+1];
for(;*newptr[j] < *newptr[j+1] && j!=0; j--)
//using j!=-1 doesn't work which causes me to not be able to sort the first element
//in the array properly
{
cout<< "test2";
int *temp;
temp = newptr[j+1];
newptr[j+1] = newptr[j];
newptr[j] = temp;
}
}**

最佳答案

订单很重要。

改变

for(;*newptr[j] < *newptr[j+1] && j!=0; j--) 

到:

for(; j != -1 && *newptr[j] < *newptr[j+1]; j--) 

大概这个错误是导致代码崩溃的原因。发生这种情况是因为 for 循环中的表达式是从左到右求值的。所以 *newptr[j] 被评估 before 检查是否 j != -1。所以可以想象,在某些时候,*newptr[j]被求值时,j等于-1,这是非法的。

由于第二个原因,更改顺序确实有所不同:short-circuit evaluation .

当计算由两个条件 AB 组成的两个表达式时,C++ 并不总是需要计算两个条件。

例如在声明中

if (A && B) {
//do something
}

如果 A 被评估为 false,那么显然 A && B 不能评估为 true 无论B 的计算结果。所以 B 的值从未被检查过。所以在你的情况下,在表达式中

j != -1 && *newptr[j] < *newptr[j+1]

如果 j != -1 为假,C++ 不需要计算表达式的其余部分就可以知道整个表达式是否为假。所以 *newptr[j] 永远不会发生,您也不会遇到错误。

关于c++ - C++中的指针数组排序算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18051199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com