【发布时间】:2014-12-22 08:58:11
【问题描述】:
我想不出我的问题的合适标题,所以就这样吧。我正在尝试学习 C,以下代码来自我正在学习的教程。
struct Person {
char *name;
int age;
int height;
int weight;
};
struct Person *Person_create(char *name, int age, int height, int weight){
struct Person *who = malloc(sizeof(struct Person));
assert(who != NULL);
who->name = strdup(name);
who->age = age;
who->height = height;
who->weight = weight;
return who;
}
void Person_destroy(struct Person *who){
assert(who != NULL);
free(who->name);
free(who);
}
int main(int argc, char *argv[]){
struct Person *joe = Person_create("Joe Alex", 32, 64, 140);
........
我的问题是在 Person_create 函数中,为什么我们要将 name 复制到 who->name 的新内存位置。为什么我们不能让who->name 指向由提供给函数的*name 提供的相同位置。
另外,如果我们直接将*name的地址分配给who->name,我们是否必须在Person_destroy中释放它。
【问题讨论】:
-
假设如果你做了
who->name = name,那么你不能修改who->name后者作为函数参数name指向字符串文字。正如@al-Acme 在他的回答中所解释的那样, -
如何调用 Person_create()。参数
name是从哪里传递过来的?它是如何创建的? -
谢谢大家的回答和cmets..
-
只是一个建议:您可能想稍微改进一下您的问题标题。它实际上并没有反映您的问题。
-
@zoska 它已经在那里了。
Person_create("Joe Alex", 32, 64, 140);