将指针传递给C中的函数

时间:2016-02-12 03:30:53

标签: c pointers

直截了当,因为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;
}

3 个答案:

答案 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/再次感谢你们!!