Я пытаюсь напечатать переменные-члены структуры двумя различными функциями: save_struct_model_1
и save_struct_model_2
. Оба, похоже, работают нормально и печатают правильные значения. Какой из этих двух правильных и предпочтительных.Структурные указатели в C
#include <stdio.h>
#include <stdlib.h>
struct model{
char *name;
int year;
};
void save_struct_model_1(struct model *s){
printf("%s ", s->name);
printf("%d \n",s->year);
}
void save_struct_model_2(struct model s){
printf("%s ", s.name);
printf("%d \n",s.year);
}
int main()
{
typedef struct model M;
M * honda = (M *) malloc (sizeof(M));
honda->name="civic";
honda->year=2000;
save_struct_model_1(honda);
save_struct_model_2(*honda);
return 0;
}
второй копирует временное значение из '* honda' и не может изменить первоначальную-структуру. –
Спасибо @BlagovestBuyukliev, – marc
'model_1' почти всегда предпочтительнее. Если вы только печатаете, используйте 'void save_struct_model_1 (const struct model * s);' Рассмотрим общий случай, где мы имеем: 'struct model {int x [1000000000]; }; 'Затем мы будем выталкивать 4GB + в стек. Это взорвало бы стек, не говоря уже о штрафе за исполнение при каждом вызове. Вот почему выполняется передача указателя struct. В 35 лет, когда я занимался C, мне никогда не приходилось использовать модель 2 –