2014-12-14 3 views
0

Я изучаю структуры в программировании на языке C. Но я запутался в этом коде, чтобы не понять. Откуда находится функция b? Как может быть такая структура? Не могли бы вы объяснить мне? Можем ли мы сказатьdisplay(struct book b1) ;вызов функции? Благодарим вас за благодарные ответы.Передача структурной переменной в функцию

#include <stdio.h> 

struct book 
{ 
    char name[25] ; 
    char author[25] ; 
    int callno ; 
} ; 
int main() 
{ 
    struct book b1 = { "Let us C", "YPK", 101 } ; 
    display (b1) ; 

    return 0; 
} 

void display (struct book b) 
{ 
    printf ("\n%s %s %d", b.name, b.author, b.callno) ; 
} 
+0

У вас есть какие-либо проблемы с 'ничтожного дисплеем (INT I) {...}'? –

+0

Не могли бы вы объяснить, почему это невозможно? –

+0

Можно ли сказать 'struct book b1; 'вызов функции? –

ответ

1

Мое лучшее предположение заключается в том, что вас смущает сходство имени переменной в главном b1 и имя параметра в функции b. Эти имена совершенно не связаны, и их можно назвать чем угодно.

В функции mainb1 является локальной переменной, которая объявляется как тип 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; 
} 
1

b - имя параметра для функции отображения. Это то, что вам нужно передать. Поэтому в основной функции при вызове дисплея (b1); b в функции отображения представляет собой структуру книги, определенную b1 в основной функции.

0

Передача структур работает как передача любого другого типа: функция ожидает переменную типа struct b как аргумент, а затем она просто работает с ней. То, что происходит за кулисами, состоит в том, что все данные b1 в вашей основной функции скопированы в b вашей функции отображения. Поэтому будьте осторожны: когда вы изменяете значение члена b в display, оно не будет изменить значение b1 в main. Если вы хотите, чтобы это произошло, вам нужно передать указатель.

Смежные вопросы