在typedef的名称前加上*。

问题描述 投票:0回答:1

我最近发现,在C语言中定义一个typedef结构时,可以在前面加上*个变量。

这是我所说的一个例子 ( *book 是这样的)。)

typedef struct item {
    int id;
    float price;
} *book, pencil;

我不太明白这是怎么一回事。

这3个变量在数据类型上是等价的吗?

struct item *foo;
book bar;
pencil *foobar;
c variables struct typedef
1个回答
0
投票

让我们看一个例子

#include <stdio.h>

typedef char  *ptr1;   //This all are same
typedef char * ptr2;
typedef char*  ptr3;

int main()
{
    printf("%zu\n",sizeof(ptr1));
    printf("%zu\n",sizeof(ptr2));
    printf("%zu\n",sizeof(ptr3));

    return 0;
}

输出。

8
8
8

在64位机中,请看 演示

输出是8,因为在x86-x64中它是指针的大小(在32位中是4)。

在你的情况下

#include <stdio.h>

typedef struct item 
{
    int id;
//    float price;  // I comment this line for clarity
}*book, pencil;

int main()
{
    printf("%zu\n",sizeof(book));
    printf("%zu\n",sizeof(pencil));

    return 0;
}

输出。

8
4

演示

谢谢。


0
投票

所有的都有相同的类型=指针到的 struct item.

书籍类型IMO是危险的,因为它将指针隐藏在typedef中,使得代码的可读性降低(对于人类),并且容易出错。

© www.soinside.com 2019 - 2024. All rights reserved.