Мое лучшее предположение заключается в том, что вас смущает сходство имени переменной в главном b1
и имя параметра в функции b
. Эти имена совершенно не связаны, и их можно назвать чем угодно.
В функции main
b1
является локальной переменной, которая объявляется как тип struct book
, а затем инициализируется инициализатором постоянной времени компиляции. Имя b1
является произвольным и может быть любым допустимым идентификатором.
В функции display
, b
является аргументом функции типа struct book
. Когда функция вызывается, вызывающий должен предоставить struct book
, и эта структура будет скопирована в b
. Важно понимать, что b
- это копия структуры, которая была передана функции display
, а это означает, что любые изменения, внесенные b
в локальную копию, не будут распространяться на исходную структуру, указанную в main
.
Вот попытка продемонстрировать эти принципы в коде
#include <stdio.h>
struct book
{
char name[25] ;
char author[25] ;
int callno ;
};
void display(struct book someArbitraryNameForTheLocalCopyOfTheStructThatThisFunctionUses)
{
printf ("%s ", someArbitraryNameForTheLocalCopyOfTheStructThatThisFunctionUses.name );
printf ("%s ", someArbitraryNameForTheLocalCopyOfTheStructThatThisFunctionUses.author);
printf ("%d\n", someArbitraryNameForTheLocalCopyOfTheStructThatThisFunctionUses.callno);
// the following line has no effect on the variable in main since
// all we have here is a local copy of the structure
someArbitraryNameForTheLocalCopyOfTheStructThatThisFunctionUses.callno = 5555;
}
int main()
{
struct book someLocalVariable = { "Let us C", "YPK", 101 };
// the following line will make a copy of the struct for the 'display' function
display(someLocalVariable);
// the following line will still print 101, since the 'display' function only changed the copy
printf ("%d\n", someLocalVariable.callno);
struct book anotherBook = { "Destiny", "user3386109", 42 };
// any variable of type 'struct book' can be passed to the display function
display(anotherBook);
return 0;
}
У вас есть какие-либо проблемы с 'ничтожного дисплеем (INT I) {...}'? –
Не могли бы вы объяснить, почему это невозможно? –
Можно ли сказать 'struct book b1; 'вызов функции? –