两种结构声明之间的差异

时间:2019-10-30 12:44:41

标签: c structure typedef

对于此代码:

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_booksecond_book是同一类型吗? 如果是的话,这两行是

first_book.name

second_book.name

要给输出相同类型的字符串吗?

4 个答案:

答案 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

是对两个对象namefirst_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)