我正在实施标准的冒泡排序算法,我对指针有一个问题。
float *SortValues(float *p, size_t n)
{
float temp;
float didSwap;
float *current;
float *last = &p[n - 1];
float *start = p;
do
{
for (didSwap = 0, current = p; current < last; current++) {
if (current[0] > current[1]) {
temp = current[0];
current[0] = current[1];
current[1] = temp;
didSwap = 1;
}
}
--last;
}
while (didSwap);
return start;
}
我很多次使用其他指针来指向传入指针的开始和/或结束。在上面的代码中,我将current设置为指向p,并开始指向p。整个循环中的电流变化。由于current和p指向同一个东西,p怎么样,因此开始最终改变为指向与current相同的东西?
答案 0 :(得分:1)
其中开始指向不会改变。 开始指向的是什么。
想象一下,你有五个杯子,你把球放在绿色的杯子里。然后你告诉我用美元钞票替换绿杯中的球。下次你看绿色杯子时,它会包含一美元,而不是你放在那里的球。
最后一次通过while循环,当last == start
时,只执行for循环的初始化,以便在while循环退出时current == p
。
答案 1 :(得分:0)
现在,代码是使用混合方法编写的,该方法使用了一些下标和一些指针寻址。
如果你重写这个循环完全使用下标而不是当前的混合寻址,那么它可能会更容易理解。
就此而言,它可以编写为完全使用没有下标的指针。
我并没有抱怨当前看起来很好的组织,我只是说它可能会对实施有所了解,看它以纯粹的形式完成两种方式。
但是要回答你的问题,请记住列表总是在同一个位置,只是元素的值被交换。所以列表的开头总是在同一个地方,但它并不总是具有相同的内容。你有这样一个面向对象的图片嵌入你的脑海中,这很好,但在这种情况下,它可能不会如此完美地为你服务。最终,数据结构只是特定地址的位数组......