我正在研究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 :(得分: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
。因此,请注意:当您更改b
中display
成员的值时,赢了更改b1
的值main
。如果你想要这样做,你必须传递一个指针。