Я не мог придумать правильное название для моего вопроса, так что вот оно. Я пытаюсь изучить C, и следующий код из учебника я следую.Дублирующие строки передаются в функции как параметры в 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 '? Как это создается? – zoska
Спасибо всем за ответы и комментарии. – MiJo