我最近发现,在C语言中定义一个typedef结构时,可以在前面加上*个变量。
这是我所说的一个例子 ( *book
是这样的)。)
typedef struct item {
int id;
float price;
} *book, pencil;
我不太明白这是怎么一回事。
这3个变量在数据类型上是等价的吗?
struct item *foo;
book bar;
pencil *foobar;
让我们看一个例子
#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
见 演示
谢谢。
所有的都有相同的类型=指针到的 struct item
.
书籍类型IMO是危险的,因为它将指针隐藏在typedef中,使得代码的可读性降低(对于人类),并且容易出错。