C语言中的typedef(包含与#define的区别)
来源:互联网 发布:人人美剧app for mac 编辑:程序博客网 时间:2024/05/17 18:45
今天在做一个编程练习的时候,想要使用链表,使用链表嘛就像使用以下typedef来定义以下链表节点,忽然感觉自己把typedef这个关键字给忘掉了,所以写这篇文章回忆以下N多年前用过的typedef
注:这部分内容中主要的内容来自百度百科typedef,还有一部分是自己的理解
简介:
typedef这个是关键字是用来为复杂的结构体或者类型定义简单的别名的关键字,注意加黑的部分,我觉得这个是理解这个结构体的关键。说白了就是赶脚一个东西太复杂比如一个人叫:尼古拉·阿列克谢耶维奇.奥斯特洛夫斯基,这么长你让谁去记下来。好吧来个简单的吧,typedef 尼古拉·阿列克谢耶维奇.奥斯特洛夫斯基 尼.阿.奥,我们就约定好了,以后一旦提到尼.阿.奥就是那个写炼钢技术的那个人。
基本用法:
(1)首先来看一下一个例子
typedef
int
size,这个很简单呀,意思就是说:来吧我们给int 类型起个别名,就喊它叫size吧,说到这里我们在看一下宏定义的用法
#define size int 这个意思就说嘿,编译器,如果你以后看到size 这个东西你就把他替换成为int就行了,注意这个里面的关键字是替换,到这里心底不禁悠然升起一个疑问,这两个意思不是一样吗?只不过一个放在前面,一个放在后面而已,真的一样吗?当然不一样,往后面看就知道了
(2)当然了,两个都可以来掩饰一些符合类型,这个是什么意思呢?例如:
typedef char* c_ptr; #define c_ptr char*;这两个都可以把一种类型的指针实现定义好,以后我们可以简单直接的用这两个来定义一些指针
(3)另外一个功能就是#define所没有的功能,这个就是可以掩饰符合类型,例如指针和数组
char line[81]; char text[81];
我们可以定义 typedef char Line[81];以后可以用Line text,line来定义和前面相同的数组。这个可是宏定义中没有的呀。
(4)百度百科上还有一个提醒说在使用typedef的时候会有一个陷阱
标准函数 strcmp()有两个‘ const char *'类型的参数。因此,它可能会误导人们像下面这样声明 mystrcmp(const pstr p1,const pstr p2):
有些编译器会把const pstr 解释成为char *const;刚开始我一直想不明白这是为什么,后来想想,这个的确是的哈,因为使用typedef会将pstr当成一种类型来看,而我们知道const本来是可以穿过类型的,就是说const char p和char const p;其实是一样的,这样就好理解了,其实我倒是想在这里如果我们使用#define来定义的话应该就不会出错了。
语言用法:
(1)
typedef
struct
tagNode
{
char
*pItem;
pNode pNext;
} *pNode;
这个定义貌似很眼熟呀,我们在定义链表的是会经常用到这种方法来定义。但是编译器会报错,为什么呢?因为在定义的过程中pNext是一个指向pNode类型的指针,而我们这个pNode还没有定义完呢,现在使用当然会出错啦。解决方法如下:
typedef
struct
tagNode
{
char
*pItem;
struct
tagNode *pNext;
} *pNode;
typedef
struct
tagNode *pNode;
struct
tagNode
{
char
*pItem;
pNode pNext;
};
struct
tagNode
{
char
*pItem;
struct
tagNode *pNext;
};
typedef
struct
tagNode *pNode;
typedef
char
* pStr1;
#define pStr2 char *
pStr1 s1, s2;
pStr2 s3, s4;
#define f(x) x*x
main( )
{
int
a=6,b=2,c;
c=f(a) / f(b);
printf
(
"%d \\n"
,c);
}
以下程序的输出结果是: 36
- C语言中的typedef(包含与#define的区别)
- C语言之define与typedef区别
- C语言define 与typedef区别
- 【C语言】语法-typedef用法及与define的区别
- C语言中typedef与#define宏的区别
- C语言--typedef 和 #define 的区别
- 【C语言复习(三)】enum、typedef 和#define的分析与区别
- c语言typedef 与 #define
- C typedef与#define区别
- 如何区别c/c++中的#typedef 和 #define的区别
- C语言中typedef的用法和#define区别
- C语言中typedef 和 #define 的区别
- C语言 typedef和define的具体区别
- typedef与#define的区别
- #typedef与#define的区别
- typedef与define的区别
- typedef与#define 的区别
- typedef与#define 的区别
- android 增加重启功能
- JAVA 初始化数据域的三种方法
- n后问题
- Git 分支 - 分支的衍合
- centos,SVN在checkout报错:SSL handshake failed
- C语言中的typedef(包含与#define的区别)
- Linux proc详解
- ibatis 开发中的经验 (一)ibatis 和hibernate 在开发中的理解
- Android开发之颜色总结
- 毛细管网地暖的优势
- IOS 本地缓存
- 飞鸽传书 CFile 大量地对文件进行操作
- Wordpress 打开首页老是加载themes.googleusercontent.com 的解决办法
- 黑马程序员——JAVA多线程编程及syncronized关键字使用