编码时我摔倒了这个小东西:
char* strinit(char* str) {
str = (char*) malloc(100);
strcpy(str, "hello SO");
return str;
}
int main()
{
char* str = strinit(str);
return 0;
}
正如您所看到的,我正在使用我声明初始化它的相同变量。这没问题。我在Java中尝试过同样的事情。这会导致错误。
所以我的问题是:这样做有什么问题吗?我可以在良心的代码中使用它吗?
答案 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)
char* str = strinit(str);
是合法的;因为它被评估为:
char* str;
str = strinit(str);