首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

typedef 的有关问题

2013-01-20 
typedef 的问题typedef char VertexType[20]根据实际测试 VertexType a 变量a实际上是char[20]但是不太

typedef 的问题
typedef char VertexType[20];
根据实际测试 VertexType a; 变量a实际上是char[20]
但是不太理解typedef的语法, typedef char vertextype[20] 根据语法是把char 定义为vertextype[20]吗?能解释一下吗

我觉得 typedef char[20] vertextype才比较合理,但是这样就无法编译通过了.
[解决办法]
我也觉得typedef char[20] vertextype才比较自然比较合理,不过C语言的语法是typedef char VertexType[20],就是定义vertextype为char[20]类型。
[解决办法]
typedef char VertexType[20];
//就是把VertexType定义成char[20]类型
//就像typedef void (*p)(int)一样,p就是一个void (int)类型指针
[解决办法]
理解了就好。typedef char VertexType[20];可以理解为typedef VertexType as char placeholder[20];,其中placeholder是占位符。
另外附上下面的问题,希望有用。

参考:你必须知道的495个C语言问题

1.13 对于用户定义类型,typedef和#define有什么区别?
一般来说,最好使用typedef,部分原因是它能够正确处理指针类型。例如,考虑这些声明:
typedef char *String_t;
#define String_d char*;
String_t s1,s2;
String_d s3,s4;
s1,s2,s3和s4都被定义为char*,而s4却被定义为char型。这可能并非原来所期望的。
#define也有它的优点,因为可以在其中使用#ifdef。另一方面,typedef具有遵守作用域规则的优点。

1.18 我有这样一组声明:typedef char *charp; const charp p; 为什么是p而不是它指向的字符为const?
typedef的替换并不是完全基于文本的。在声明const charp p;中,p被声明为const的原因与const int i将i声明为const的原因是一样的。p的声明不会深入typedef的内容来发现涉及了指针。
[解决办法]
typedef可以用来掩饰复合类型,比如数组和指针
typedef char vertextype[20]即:tertextype类型代表了具有20个元素的字符数组。
后面就可以用vertextype a;来定义a为20个元素的char数组。
又比如指针:
typedef char *p。

至于语法,就跟你定义一个这样的类型的方式一样。
比如:char arr[20];//char[20] arr这种写法不行吧?
[解决办法]
从语法合理上来讲 可能LZ说的那种比较合理
但存在即合理,所以这种写法对于编译器处理数据类型定义和函数指针类型以及其他类型 是更加通用的写法,或者是更加便于编译器解析的方式。

热点排行