执行以下语句后,数组的内容是什么?
#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;
}
答案 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
被置于p
在p
,然后temp
递增(即,它向阵列末尾移动一步)。然后,q
中的值放在q
,capabilities = Selenium::WebDriver::Remote::Capabilities.firefox(:firefox_profile => "myprofile")
driver = Selenium::WebDriver.for(:remote, :desired_capabilities => capabilities)
递减(即,它向数组的开头移动一步)。
当`p`和`q`相遇时,循环中断。
下次的建议:打印数组以了解它已成为什么。