📅  最后修改于: 2023-12-03 15:39:54.030000             🧑  作者: Mango
UGC NET是印度国家资格测试,旨在评估大学和学院教授的资格。 UGC NET CS 2014年12月-II试卷是计算机科学的一部分。问题42是其中的一个问题。
给定以下C程序,输出结果是什么?
#include <stdio.h>
int main() {
char str[] = "Hello World!";
char *p1, *p2;
p1 = str;
p2 = str + sizeof(str) - 2;
while(p1 < p2) {
*p1 ^= *p2 ^= *p1 ^= *p2;
p1++;
p2--;
}
printf("%s\n", str);
return 0;
}
(A) None of these
(B) dlroW olleH
(C) Hello World!
(D) !dlroW olleH
该程序使用异或交换两个变量的值。 对于字符串,可以通过这种方法颠倒所有字符的位置。该程序使用两个指针p1和p2来分别指向字符串str的开头和结尾。
p1 = str;
p2 = str + sizeof(str) - 2;
在while循环中,它颠倒字符串中p1和p2位置上的字符,非常巧妙地使用了异或运算符(^)来交换两个字符的值。
*p1 ^= *p2 ^= *p1 ^= *p2;
每一次循环,p1和p2都向字符串的中心移动。 当p1 == p2或p1 > p2时停止while循环。 然后,该程序使用printf函数打印颠倒后的字符串。
由于该程序颠倒了字符串的顺序,因此输出结果为
(D) !dlroW olleH