我很困惑。不知道阵列内容是否保持不变?

时间:2016-11-07 06:35:51

标签: c arrays pointers

执行以下语句后,数组的内容是什么?

#include <stdio.h>
#define N 10


int main() {

int a[N] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int *p = &a[0], *q = &a[N - 1], temp;

while (p > q) 
{
    temp = *p;
    *p++ = *q;
    *q-- = temp;
}
printf("%d", a[N]);
return 0;
}

2 个答案:

答案 0 :(得分:1)

如我的评论中所述,不会发生任何事情,因为p小于q

如果将while循环更改为while (p <= q),则会颠倒数组的顺序。

您获取第一个元素(p)并将其放入temp

然后你把最后一个元素(q)放在第一位(p)。

然后你增加p,使它指向第二个元素。

然后在最后一个元素中写temp。并减少q,使其指向倒数第二个元素。再次执行此操作,直到p大于或等于q

编辑: 你的问题在于你的print语句。您只需使用a[N]在数组的最后一个元素后打印元素。您的数组来自a[0]a[9]。通过从a[10]读取,您调用未定义的行为,因为它不是数组的一部分。所以你得到一个随机数。

你会想要这样的东西。

for (int i = 0; i<N;i++) 
{
   printf("a[%d] = %d\n",i,a[i]);
}

答案 1 :(得分:0)

正如Mak所说,如果while条件实际为p < q,则代码会切换第一个和最后一个值,然后是第二个和第二个,等等。

说明

指针p设置在数组的开头,而q设置在结尾处。在每个循环中,p的值*p存储在temp中,然后q的值*q被置于pp,然后temp递增(即,它向阵列末尾移动一步)。然后,q中的值放在qcapabilities = Selenium::WebDriver::Remote::Capabilities.firefox(:firefox_profile => "myprofile") driver = Selenium::WebDriver.for(:remote, :desired_capabilities => capabilities) 递减(即,它向数组的开头移动一步)。

当`p`和`q`相遇时,循环中断。

下次的建议:打印数组以了解它已成为什么。