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)