在代码中走进其他一些代码,我发现*
这是什么?
这是该代码的原型,并没有给出任何错误.只有警告随附gcc 4.5.2但在Windows上它不会发出警告并正确编译.由于公司的IP,我无法提供实际代码,但我想知道这是如何以及为什么这是正确的?
#include<stdio.h>
typedef enum e
{
a,
b,
c
}x,*y;
int main()
{
x t=4;
printf("x : %d\n",t);
y m=5;
printf("*y : %d\n",m);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它相当于:
typedef enum e *y;
Run Code Online (Sandbox Code Playgroud)
所以y是别名enum e *,即y m声明m为指针enum e.以下代码确实按预期工作:
#include <stdio.h>
x t = 4;
printf("x : %d\n", t);
y m = &t;
printf("*y : %d\n", *m);
Run Code Online (Sandbox Code Playgroud)
这只是一般模式的一个特例typedef TYPE * NAME,它只是意味着"从这一点来说,NAME是类型的别名"指向TYPE"."这里,TYPE可以是任何有效的类型声明.
一般来说,我反对typedef:像这样删掉星号,因为它使得使用该类型的代码非常混乱.C中的指针非常重要,知道你是否有值或只是指向某个值的指针通常都很好,这种做法会使这个事实隐藏起来.