wedtorque Ответов: 2

Вопрос о структуре программирования на языке Си


int main()
{
   struct Books
   {
       int id;
       char name[20];
       char author[20];
       char subject[20];

   };

struct Books Books1;

printf("enter id ");
scanf("%d",&Books1.id);
fflush(stdin);

printf("enter name ");
scanf("%[^\n]s",Books1.name);
fflush(stdin);

printf("enter author ");
scanf("%[^\n]s",Books1.author);
fflush(stdin);

printf("enter subject");
scanf("%[^\n]s",Books1.subject);

printf("\n");
printf("id :%d ",Books1.id);
printf("\nname :%s",Books1.name);
printf("\nauthor :%s",Books1.author);
printf("\nsubject :%s",Books1.subject);

printData(Books1.id);
return 0;
}


Что я уже пробовал:

есть ли способ передать эту структуру другой функции без использования вызова по ссылке (указатели).
есть ли способ передать один член структуры другой функции без использования вызова по ссылке (указатели).

я знаю, что это можно сделать с помощью вызова refernce или глобального объявления struct.

2 Ответов

Рейтинг:
4

Patrice T

Ответ-нет ни для чего, кроме id член.
Правило tumb, вы можете передавать по значению только основные типы данных (они помещаются в регистр процессора): int char long, float double, pointer ...
Для всего остального это указатель: массив, структура, список ...

char name[20];

является массивом

Перейти к основам C
Язык программирования Си - Википедия, свободная энциклопедия[^]
https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf[^]
http://www.ime.usp.br/~ПФ/Керниган-Ритчи/с-Программирование-электронные книги.формат PDF[^]


Рейтинг:
17

OriginalGriff

Нет. Проблема в том, что это локальная структура - она известна только в том методе, в котором она объявлена, - поэтому нет никакого практического способа объявить ее как параметр функции без получения ошибки компилятора.
Вы можете сделать это, если глобально объявите структуру - в этом случае она будет передаваться по значению, как и все другие параметры в C.