以下代码片段产生相同的输出。但哪个是对的?

时间:2016-08-10 02:01:13

标签: c pointers pass-by-reference

下面的代码片段是错误的.......但似乎工作正常

#include <stdio.h>

void fun(char* msg);

int main()
{
    char* str = "Hello";
    printf("%s\n",str);

    fun(&str);

    printf("%s\n",str);
    return 0;

}

void fun(char* msg){
    *msg = "World";

}

现在正确的代码段

#include <stdio.h>

void fun(char** msg);

int main()
{
    char* str = "Hello";
    printf("%s\n",str);

    fun(&str);

    printf("%s\n",str);
    return 0;

}

void fun(char** msg){
    *msg = "World";

}

上述代码的目的是修改str的值。 两个代码都产生相同的输出,但为什么在这种情况下错误的代码似乎正常工作。

1 个答案:

答案 0 :(得分:5)

第一个不应该编译,因为&strchar**,但声明该函数采用char*

此外,在*msg = "World";中,"World"char*,但*msg是单char