0

在代码遍历到其他一些代码中,我发现* 这是什么?

这是该代码的相同原型,它没有给出任何错误。只有警告附带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;
}
4

3 回答 3

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);
于 2012-11-06T12:46:14.230 回答
5

这只是一般模式的一个特例typedef TYPE * NAME,它只是意味着“从这一点开始,NAME是类型“指针TYPE”的别名。这里,TYPE可以是任何有效的类型声明。

一般来说,我反对typedef: 像这样去掉星号,因为它会使使用该类型的代码非常混乱。C 中的指针非常重要,知道您是否有一个值或只是一个指向值的指针通常很好,而这种做法使这个事实隐藏起来。

于 2012-11-06T12:48:22.213 回答
2

它不是一个尊重运算符(在这种用法中),它是一个指向enum e.

您收到警告的原因可能是这一行:

y m=5;

您正在为指针分配一个整数。您需要为其分配一个地址:

y m=&t;
于 2012-11-06T12:49:32.317 回答