义变量。
答案与分析 C 语言当然允许在结构中包含指向它自己的指针,我们可以在建立链表等数据结构的实现上看到无数这样的例子,上述代码的根本问题在于 typedef 的应用。
根据我们上面的阐述可以知道:新结构建立的过程中遇到了 pNext 域的声明,类型是pNode,要知道 pNode 表示的是类型的新名字,那么在类型本身还没有建立完成的时候,这个类型的新名字也还不存在,也就是说这个时候编译器根本不认识 pNode。
解决这个问题的方法有多种: 1、typedef struct tagNode char pItem struct tagNode pNext pNode 2、typedef struct tagNode pNodestruct tagNode char pItem pNode pNext 注意:在这个例子中,你用 typedef 给一个还未完全声明的类型起新名字。
C 语言编译器支持这种做法。
3、规范做法:struct tagNode char pItem struct tagNode pNexttypedef struct tagNode pNode 3. typedef define 的问题 有下面两种定义 pStr 数据类型的方法,两者有什么不同?哪一种更好一点?typedef char pStrdefine pStr char 答案与分析: 通常讲,typedef 要比define 要好,特别是在有指针的场合。
请看例子:typedef char pStr1define pStr2 char pStr1 s1 s2pStr2 s3 s4 在上述的变量定义中,s1、s2、s3 都被定义为 char ,而 s4 则定义成了 char,不是我们所预期的指针变量,根本原因就在于define 只是简单的字符串替换而 typedef 则是为一个类型起新名字。
define 用法例子:define fx xxmain int a6,b2,c; cfa / fb; printfd n,c; 以下程序的输出结果是: 36。
因为如此原因,在许多 C 语言编程规范中提到使用define 定义时,如果定义中包含表达式,必须使用括号,则上述定义应该如下定义才对:define fx xx 当然,如果你使用 typedef 就没有这样的问题。
4. typedef define 的另一例 下面的代码中编译器会报一个错误,你知道是哪个语句错了吗?typedef char pStrchar string4 abcconst char p1 stringconst pStr p2 stringp1p2 答案与分析: 是 p2出错了。
这个问题再一次提醒我们:typedef 和define 不同,它不是简单的文本替换。
上述代码中 const pStr p2 并不等于 const char p2。
const pStr p2 和 const long x 本质上没有区别,都是对变量进行只读限制,只不过此处变量 p2 的数据类型是我们自己定义的而不是系统固有类型而已。
因此,const pStr p2 的含义是:限定数据类型为 char 的变量 p2 为只读,因此 p2错误。
define 与 typedef 引申谈 1 define 宏定义有一个特别的长处:可以使用 ifdef ifndef 等来进行逻辑判断,还可以使用undef 来取消定义。
2 typedef 也有一个特别的长处:它符合范围规则,使用 typedef 定义的变量类型其作用 ,而宏定义则没有这种特范围限制在所定义的函数或者文件内(取决于此变量定义的位置)性。
5. typedef 复杂的变量声明 在编程实践中,尤其是看别人代码的时候,常常会遇到比较复杂的变量声明使用 typedef作简化自有其价值,比如: 下面是三个变量的声明,我想使用 typdef 分别给它们定义一个别名,请问该如何做?1:int a5int char2:void b10 void 3. doube pa9 答案与分析: 对复杂变量建立一个类型别名的方法很简单,你只要在传统的变量声明表达式里用类型名替代变量名,然后把关键字 typedef 加在该语句的开头就行了。
1:int a5int char//pFun 是我们建的一个类型别名typedef int pFunint char//使用定义的新类型来声明对象,等价于 int a5int charpFun a52:void b10 void //首先为上面表达式蓝色部分声明一个新类型typedef void pFunParam//整体声明一个新类型typedef void pFunpFunParam//使用定义的新类型来声明对象,等价于 void b10 void pFun b103. doube pa9//首先为上面表达式蓝色部分声明一个新类型typedef doublepFun//整体声明一个新类型typedef pFun pFunParam9//使用定义的新类型来声明对象,等价于 doube pa9pFunParam pa本 文 来 自 CSDN 博 客 , 转 载 请 标 明 出 处 :http://blog.csdn.net/gungod/archive/2006/11/21/1400936.aspx
上一篇:
【精品】html教程
下一篇:
锦鲤送不停 猎豹汽车嗨翻“疯狂购车季”