关于涉及指针的简单神秘函数的两个问题

问题描述 投票:0回答:1

我的班级目前正在研究C语言中的指针,我们被要求解释以下函数在给定数组及其长度的情况下的作用。我目前了解到,它会创建一个指针* x,它指向数组中的第一个元素,然后它创建另一个指针* y,它指向数组的末尾。但是其余的我不明白。我将总结我的问题:

1st:while循环检查什么?换句话说,(x

2nd:while循环是否只是对数组求逆?如果是这样,x和y值如何增加?我看不到* x和* y引用数组中第一个和最后一个元素以外的任何元素的任何方法。

void mystery(int arr[], int len) {
    int *x = arr;
    int *y = arr + len - 1;
    while (x < y) {
        int t = *x;
        *x = *y;
        *y = t;
    }
}

感谢您提供见解和知识。

c pointers memory reference memory-address
1个回答
2
投票

…它创建一个指针,* x,…

否,x是指针。它指向的是*x

…(x

x < y测试x是否指向某个比y更早的地方。 (仅在xy指向相同的数组,结构或联合的情况下定义。)在数组中,如果元素的索引较低,则该元素比另一个元素早。在结构中,如果成员在结构定义中更早声明,则该成员早于另一个。在工会中,任何成员都不得早于任何其他成员。

while循环是否只是对数组求逆?

循环已损坏代码。它永远不会更改xy,因此它永远不会更改条件x < y的计算结果是否为true,因此,如果进入循环,它将永远不会终止。看起来可能像是旨在反转数组元素的代码。

© www.soinside.com 2019 - 2024. All rights reserved.