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

时间:2015-05-12 08:42:19

标签: c variables conventions

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

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

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

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

2 个答案:

答案 0 :(得分:1)

不是你能做的一切都应该完成。代码

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;
}

并调用不带参数的函数。

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

答案 1 :(得分:1)

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

 char* str;
 str = strinit(str);

请参阅Why is 'int i = i;' legal?