在代码中逐步浏览其他代码,我发现*
这是什么?
这是该代码的原型,并没有给出任何错误。
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;
}
答案 0 :(得分:6)
相当于:
typedef enum e *y;
因此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);
答案 1 :(得分:5)
这只是一般模式typedef TYPE * NAME
的一个特例,它只是意味着“从这一点开始,NAME
是”指向TYPE
的指针“的别名。 ,TYPE
可以是任何有效的类型声明。
一般来说,我反对typedef
:像这样删掉星号,因为它会使使用该类型的代码非常混乱。 C中的指针非常重要,通常很高兴知道你是否有一个值或只是一个指向值的指针,这种做法会使这个事实隐藏起来。
答案 2 :(得分:2)
它不是deference运算符(在此用法中),它是指向enum e
的指针。
你收到警告的原因可能是这一行:
y m=5;
您正在为指针指定一个整数。您需要为其分配一个地址:
y m=&t;