2种结构声明的区别
Differences between 2 kinds of structure declare
对于此代码:
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
要为输出提供相同类型的字符串吗?
不,虽然它们共享一个类型,但它们是具有不同内存位置的完全不同的变量。
类型名称 book_t
是 struct book_s
的 别名 。它们是相同的类型,可以互换使用。因此结构objects(结构实例)也是相同的类型。
结构对象(实例)不同且不同,但它们具有相同的类型。
是的,它们都是"book_s"结构类型
但!他们不一样 instance/object.
例如:
结构book_sfirst_book;
// ^- 你现在有一个名为 "first_book" 的对象,类型为 book_s
book_t second_book;
// ^ 你现在有第二个对象 "second_book" 类型 book_t
// 这是 struct book_s
的别名
将字符串设置为:first_book.name
不会影响字符串:second_book.name
呼叫:first_book.name
将 return 一个字符串,但与另一个对象 "second_book.name"
不同
它们都return相同的类型:字符串
它们都有其他值。
希望对您有所帮助!
这两个对象声明
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
是对first_book
和second_book
两个对象声明结构的数据成员name
的成员访问表达式。
这是一个演示程序
#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)
对于此代码:
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
要为输出提供相同类型的字符串吗?
不,虽然它们共享一个类型,但它们是具有不同内存位置的完全不同的变量。
类型名称 book_t
是 struct book_s
的 别名 。它们是相同的类型,可以互换使用。因此结构objects(结构实例)也是相同的类型。
结构对象(实例)不同且不同,但它们具有相同的类型。
是的,它们都是"book_s"结构类型 但!他们不一样 instance/object.
例如:
结构book_sfirst_book;
// ^- 你现在有一个名为 "first_book" 的对象,类型为 book_s
book_t second_book;
// ^ 你现在有第二个对象 "second_book" 类型 book_t
// 这是 struct book_s
将字符串设置为:first_book.name 不会影响字符串:second_book.name
呼叫:first_book.name 将 return 一个字符串,但与另一个对象 "second_book.name"
不同它们都return相同的类型:字符串 它们都有其他值。
希望对您有所帮助!
这两个对象声明
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
是对first_book
和second_book
两个对象声明结构的数据成员name
的成员访问表达式。
这是一个演示程序
#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)