Имейте в виду, что в C на самом деле нет передачи по ссылке , обычно вы передаете по значению. Это тонкое, но важное различие. Учтите это:
void func_a(int *a) {
a = 0;
}
int main() {
int value = 5;
func_a(&value);
return 0;
}
Здесь мы видим, что мы установили a = 0;
Однако это не влияет на фактическое значение, вы просто переходите туда, где оно указывает в локальной области действия функции. Если бы мы действительно хотели изменить значение a
, нам бы пришлось его разыменовать.
*a = 0;
В таких языках, как C ++ и C #, существуют языковые конструкции для передачи по ссылке, но в C вы можете передавать только по значению.
Что касается вашего кода, простое исправление:
void readStructs(tMystruct *theVar)
{
scanf("%d", &theVar->id);
scanf("%f", &theVar->length);
}
Ваша функция принимает указатель на tMystruct
в качестве первого аргумента, поэтому мы можем использовать оператор стрелки ->
и получить доступ к значению, а затем взять его адрес и передать его в scanf
. Это эквивалентно
void readStructs(tMystruct *theVar)
{
scanf("%d", &((*theVar).id));
scanf("%f", &((*theVar).length));
}