📜  门| GATE CS 2018 |第 52 题

📅  最后修改于: 2021-09-26 04:27:44             🧑  作者: Mango

考虑以下 C 程序:

#include 
void fun1(char *s1, char *s2) {
  char *temp;
  temp = s1;
  s1 = s2;
  s2 = temp;
}
void fun2(char **s1, char **s2) {
  char *temp;
  temp = *s1;
  *s1 = *s2;
  *s2 = temp;
}
int main() {
  char *str1 = "Hi", *str2 = "Bye";
  fun1(str1, str2);
  printf("%s %s", str1, str2);
  fun2(&str1, &str2);
  printf("%s %s", str1, str2);
  return 0;
}

上面程序的输出是

(A)嗨,再见,嗨
(B)你好 再见 再见
(C)再见嗨嗨再见
(D)再见你好 再见你好答案:(一)
解释: fun1(char *s1, char *s2)
以上函数作用域是局部的,所以这里改变的值不会影响实际参数。所以值将是“嗨,再见”。 fun2(char **s1, char **s2)
在这个函数值是指向指针的指针,所以它改变了实际值的指针。所以值将是“再见你好”

答案是“嗨,再见,嗨”

选项(A)是正确的。这个问题的测验