跟踪指针

时间:2010-02-21 05:48:41

标签: c pointers

我正在实施标准的冒泡排序算法,我对指针有一个问题。

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相同的东西?

2 个答案:

答案 0 :(得分:1)

其中开始指向不会改变。 开始指向的是什么。

想象一下,你有五个杯子,你把球放在绿色的杯子里。然后你告诉我用美元钞票替换绿杯中的球。下次你看绿色杯子时,它会包含一美元,而不是你放在那里的球。

最后一次通过while循环,当last == start时,只执行for循环的初始化,以便在while循环退出时current == p

答案 1 :(得分:0)

下标与指针


现在,代码是使用混合方法编写的,该方法使用了一些下标和一些指针寻址。

如果你重写这个循环完全使用下标而不是当前的混合寻址,那么它可能会更容易理解。

就此而言,它可以编写为完全使用没有下标的指针。

我并没有抱怨当前看起来很好的组织,我只是说它可能会对实施有所了解,看它以纯粹的形式完成两种方式。

但是要回答你的问题,请记住列表总是在同一个位置,只是元素的值被交换。所以列表的开头总是在同一个地方,但它并不总是具有相同的内容。你有这样一个面向对象的图片嵌入你的脑海中,这很好,但在这种情况下,它可能不会如此完美地为你服务。最终,数据结构只是特定地址的位数组......