C 两种结构声明的区别
对于此代码:C 两种结构声明的区别,c,structure,typedef,C,Structure,Typedef,对于此代码: typedef struct book_s{ char name[50]; char author[50]; int price; } book_t; 我将声明此结构的两个变量: struct book_s first_book; book_t second_book; first\u book和second\u book是同一类型吗? 如果是,这两条线是什么 first_book.name second_book.name 是否要为输出提供相同类型的字符串?否尽管它们共享
typedef struct book_s{
char name[50];
char author[50];
int price;
} book_t;
我将声明此结构的两个变量:
struct book_s first_book;
book_t second_book;
first\u book
和second\u book
是同一类型吗?
如果是,这两条线是什么
first_book.name
second_book.name
是否要为输出提供相同类型的字符串?否尽管它们共享一种类型,但它们是具有不同内存位置的完全不同的变量。类型名称
book\t
是结构书的别名。它们是相同的类型,可以互换使用。因此,结构对象(结构实例)的类型也相同
结构对象(实例)不同且不同,但类型相同。是的,它们都是“book_s”结构类型
但是它们不是相同的实例/对象
e、 g:
结构书的第一本书
//^-现在有一个名为“first\u book”的对象,类型为book\u s
第二本书
//^您现在有了第二个对象,名为“第二本书”,类型为book\t
//哪一个是struct book_s的别名
将字符串设置为:first_book.name
不会影响:second_book.name中的字符串
呼叫:first_book.name
将返回一个字符串,但与另一个对象“second_book.name”的字符串不同
它们都返回相同的类型:string
它们都有其他价值观
希望这有帮助 这两个对象声明
struct book_s first_book;
book_t second_book;
它们是等价的
在第一个声明中,使用了类型说明符structbook\u s
。在第二个声明中,使用了typedef名称,它是类型说明符struct book_s
的别名
此外,您甚至可以按照以下方式编写typedef
typedef struct book_s{
char name[50];
char author[50];
int price;
} book_s;
并定义对象,如
struct book_s first_book;
book_s second_book;
这些表达
first_book.name
second_book.name
是两个对象的声明结构的数据成员的成员访问表达式name
,first\u book
和second\u book
这是一个演示程序
#include <stdio.h>
typedef struct book_s{
char name[50];
char author[50];
int price;
} book_t;
int main(void)
{
struct book_s first_book =
{
"Expert C Programming", "Peter van der Linden", 10
};
book_t second_book =
{
"Head First C", "David Griffiths and Dawn Griffiths", 15
};
printf( "%s by %s (%d)\n", first_book.name,
first_book.author,
first_book.price );
printf( "%s by %s (%d)\n", second_book.name,
second_book.author,
second_book.price );
return 0;
}
OP没有问他们是否是同一个变量!问题是“他们是同一类型的吗?”谢谢你的回答!我只是想看看它们是否是相同的类型,我知道它们是两个不同的变量,并且不共享相同的值或内存位置谢谢你的回答!我只是问他们是不是同一类型。无论如何,谢谢你的回答!
Expert C Programming by Peter van der Linden (10)
Head First C by David Griffiths and Dawn Griffiths (15)