直截了当,因为C将指针作为函数的参数传递,为什么swap函数中printf下面的程序不会打印与main函数中的pinrtf相同的地址(我认为指针是正确传递的),做错了什么这里吗?
#include <stdio.h>
void swap(char **str1, char **str2)
{
char * temp = *str1;
*str1 = *str2;
*str2 = temp;
printf("1---(%#x) (%#x)---\n", &str1, &str2);
printf("2---(%s) (%s)---\n", *str1, *str2);
}
int main ()
{
char * str1 = "this is 1";
char * str2 = "this is 2";
// swap(&str1, &str2);
printf("(%s) (%s)\n", str1, str2);
printf("(%#x) (%#x)\n", &str1, &str2);
swap(&str1, &str2);
printf("(%s) (%s)\n", str1, str2);
printf("(%#x) (%#x)\n", &str1, &str2);
return 0;
}
答案 0 :(得分:2)
这里是交换功能
swap(&str1, &str2);
您发送交换功能,str1&amp;的地址STR2。在交换功能
中void swap(char **str1, char **str2)
您创建一个变量来保存地址(具有自己的地址)。
使用您的打印功能
printf("1---(%#x) (%#x)---\n", &str1, &str2);
在此处打印存储char地址的变量的地址。如果您打印存储在该地址中的内容,则可以找到您的字符地址。要打印存储的内容,只需使用这样的调整器打印
printf("0---(%#x) (%#x)---\n", str1, str2);
运行之后,你会得到类似的东西
(this is 1) (this is 2)
(0x61fedc) (0x61fed8)
0---(0x61fedc) (0x61fed8)---
1---(0x61fec0) (0x61fec4)---Here is the address of var that store your char address
2---(this is 2) (this is 1)---
(this is 2) (this is 1)
(0x61fedc) (0x61fed8)
答案 1 :(得分:1)
在交换函数中,您尝试打印局部变量str1和st2的地址,该地址变量与主函数中的变量str1和str2的地址不同。尝试将交换函数中的print语句连接到:
printf("1---(%#x) (%#x)---\n", str1, str2);
答案 2 :(得分:0)
谢谢大家的帮助,我是C编程的新手,所以我发布的代码在这里可能有点棘手,我想我找到的答案,这里是一个链接http://denniskubes.com/2012/08/20/is-c-pass-by-value-or-reference/再次感谢你们!!