C转换语法和typedef

时间:2011-07-11 08:22:54

标签: c casting typedef

C声明语法相当复杂......

这让我想到了关于转换语法的问题,

简单类型很简单,只需将类型放在括号中即可。 但是如何类型,

int (*2Dap) [5];double (*fp) (double, double);

我在这里猜测,规则是剥去正常变量声明的标识符(加分号)​​并将其放在括号中。

因此,int (*2Dap) [5];变为( int (*) [5] )char * str;变为(char *)

这是一般规则吗?

正如typedef那样,您的新“类型”将是typedef声明中的“变量”,

例如。 typedef double (*twoINoneOUT) (double, double);“twoInoneOUT”将是您的新“类型”。

正确?

只是想澄清一下。我知道我甚至不太可能需要这些 - 这可以让我免于不必要地输入defde。

2 个答案:

答案 0 :(得分:2)

  

我在这里猜测,规则是剥离标识符(加上   正常变量声明的分号并将其放入   括号中。

右。这声明了一个名为x的变量:

int (*x)[5];

变量的类型为int (*)[5],您可以使用强制转换(int (*)[5])强制转换为该类型。

  

如此typedef,你的新“类型”将是你的“变量”   你的typedef声明,

也正确。这声明了一个名为t的类型别名:

typedef int (*t)[5];

从语法上讲,typedefstatic等存储类说明符位于同一位置。

答案 1 :(得分:0)

这可能有用:

http://www.unixwiz.net/techtips/reading-cdecl.html

这对于看起来像完全乱码的内容非常有用

http://cdecl.org/