在同一变量的初始化中使用变量

using variable in initialization of same variable

我在编码时被这个小东西摔倒了:

char* strinit(char* str) {
    str = (char*) malloc(100);
    strcpy(str, "hello SO");
    return str;
}
int main()
{
    char* str = strinit(str);
    return 0;
}

如您所见,我正在使用我声明的同一个变量来初始化它。这没问题。我在 Java 中尝试了同样的事情。这会导致错误。

所以我的问题是:这样做有什么问题吗?我可以凭良心在我的代码中使用它吗?

不是所有你能做的都应该做。代码

char* strinit(char* str) {
    str = (char*) malloc(100);
    strcpy(str, "hello SO");
    return str;
}

仅将参数用作局部变量。你应该把它改成

char* strinit(void) {
    char* str = malloc(100);
    strcpy(str, "hello SO");
    return str;
}

并调用不带参数的函数。

编辑: 您的函数的实际调用只有一点点问题。 main函数中变量str的值传递给了strinit函数。这对你来说很便宜。但如果参数类型是更复杂的类型,这可能会很昂贵。编译器将创建可以调用对象构造函数的参数的副本。当然,指针的拷贝是廉价的。

C & C++认为char* str = strinit(str);是合法的;因为它被评估为:

 char* str;
 str = strinit(str);

参见 Why is 'int i = i;' legal?