【发布时间】:2021-08-13 16:01:40
【问题描述】:
void fun1(char *s1, char *s2) {
char *temp;
temp = s1;
s1 = s2;
s2 = temp;
}
int main () {
char *str1 = "Hello", *str2 = "there!"
fun1(str1, str2);
printf("%s %s", str1, str2);
return 0;
}
鉴于上面的代码,据我了解,我们按值传递指针,所以如果值是 str1 = 1000,str2 = 2000,fun1 会切换它们,所以 str1 = 2000,str2 = 1000。 所以当我们试图打印它们时,我们应该得到“那里!你好”,但答案说它打印“你好!”而且我不明白为什么..通过在str1的值周围切换它们应该是“那里!”的第一个字符的内存地址!和 "Hello" 的第一个字符的 str2 .. 我觉得我错过了一些重要的东西..
【问题讨论】:
-
你的函数
fun1正在交换它的指针副本。它不交换指向的数据,也不对调用者中的str1和str2指针做任何事情。 -
“据我了解,我们按值传递指针”-您在第一句话中回答了自己的问题。
-
函数中的变量与
main中的变量不一样 -
所以每当我们通过值传递时,我们都会创建传递下来的争论的副本?也就是说,新副本在内存中有自己的位置,并且曾经与原始变量没有任何联系?
-
这是对pass-by-value的一个很好的定义。