将结构变量传递给函数

时间:2014-12-14 21:23:27

标签: c arrays function struct

我正在研究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 ) ;
}

3 个答案:

答案 0 :(得分:1)

b是显示功能的参数名称。这是你必须传递给它的东西。所以在主函数中调用display(b1);显示功能中的b表示主函数中由b1定义的书籍结构。

答案 1 :(得分:1)

我最好的猜测是你对主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;
}

答案 2 :(得分:0)

传递结构就像传递任何其他类型一样:函数需要一个类型为struct b的变量作为它的参数,然后它才能使用它。幕后发生的事情是,主要功能中b1的所有数据都复制到显示功能的b。因此,请注意:当您更改bdisplay成员的值时,赢了更改b1的值main。如果你想要这样做,你必须传递一个指针。