Поскольку a
является глобальным, в этом случае нет существенной разницы, в первой функции вы передаете указатель на a
, любые изменения, внесенные в a
в области действия функции, будут отражены в a
выходит за рамки функции, даже если она не глобальная.
Вторая функция действует напрямую в глобальной переменной, поэтому изменения, очевидно, также отражаются в a
.
Соответствующая разница будет отмечена, если вы передадите a
по значению, например:
xyz_t a;
void func3(xyz_t b)
{
printf("%d", b.x); //example 3
}
//...
func3(a);
//...
Здесь вы передадите a
по значению, по сути, копию a
, любое изменение, внесенное в a
в рамках функции на самом деле будет относиться не к a
, а к его копии, и, естественно, он не будет отражаться в исходном a
.
Отметив, что вы ничего не меняете, только печать значения, хранящегося в a
любого из трех, дает те же результаты.
В этом случае, поскольку вы не пытаетесь изменить переменную, рекомендуется использовать ключевое слово const
, чтобы избежать случайного изменения.
void func1(const xyz_t* b)
Передача по значению также защищает от случайные изменения, но это может замедлить работу программы, если вы имеете дело с большими структурами данных.