对于此代码:
typedef struct book_s{
char name[50];
char author[50];
int price;
} book_t;
我将声明此结构的2个变量:
struct book_s first_book;
book_t second_book;
first_book
和second_book
是同一类型吗?
如果是的话,这两行是
first_book.name
second_book.name
要给输出相同类型的字符串吗?
答案 0 :(得分:7)
类型名称def av_blur():
# your code here
是book_t
的别名。它们是相同的类型,可以互换使用。因此,结构 objects (结构实例)的类型也相同。
结构对象(实例)不同且不同,但是它们具有相同的类型。
答案 1 :(得分:1)
否,尽管它们共享一种类型,但是它们是完全不同的变量,具有不同的内存位置。
答案 2 :(得分:1)
是的,它们都是“ book_s”结构类型 但!它们不是相同的实例/对象。
例如:
struct book_s first_book;
// ^-您现在有了一个类型为book_s
的对象“ first_book”
book_t second_book;
// ^现在,您有了第二个名为book_t
的对象“ second_book”
//这是struct book_s的别名
将字符串设置为:first_book.name 不会影响以下位置的字符串:second_book.name
致电:first_book.name 将返回一个字符串,但与另一个对象“ second_book.name”不同。
它们都返回相同的类型:字符串 它们都有其他值。
希望这会有所帮助!
答案 3 :(得分:1)
这两个对象声明
struct book_s first_book;
book_t second_book;
等效。
在第一个声明中,使用类型说明符struct book_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_book
的声明结构的数据成员second_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;
}
其输出为
Expert C Programming by Peter van der Linden (10)
Head First C by David Griffiths and Dawn Griffiths (15)