typedef解析
来源:互联网 发布:java set集合获取元素 编辑:程序博客网 时间:2024/06/05 17:03
最近在学习C语言,有很多新知识,我总是对不熟悉的知识有一种敬畏感,也就容易导致望而生畏的感觉,总是不会用,所以在学习之余我将其记录下来,也算是一次次征服吧!
- typedef与define的区别
如下分析:
define PINT1 int * tyedef int *PINT2; PINT1 p1,p2; PINT2 p3,p4;
请问p1与p2是同一类型吗,p3与p4呢? 答案是p1与p2不是同一类型;p3与p4是同一类型即指针类型; 按照下文分解其实际定义结果:
int *p1; int p2; int *p3; int *p4;
也就是说,只有typedef才真正拥有自定义变量的能力,当然也包括上面的重命名内建类型(ADT)的能力 尤其是在定义某个比较复杂的自定义类型时,typedef就很方便了:
typedef int *(*pFunc)(int *, int *); pFunc p1; int *(*p2)(int *, int *);
p1和p2的类型是一模一样的,你说那个简单些,尤其是需要需要大量定义时
2.typedef改变自建类型增强可移植性
在C语言中,很多自建类型譬如int ,在不同的平台下其自身大小是不一样的,不如16位机器上是16位的,32位机器上是32位的,所以为了解决这个问题就做了很多自定义作为缓冲,譬如:typedef int size_t
,尤其是在linux系统中用特别多
3. typedef与结构体的自定义
很多时候当你定义结构体时:
struct student{ int age; char name;}//其实是这样定义的:typedef struct student{ int age; char name;}Stu,*pStu;
那么后面的定义是什么意思呢?
//在使用结构体时:struct student s1;//也可以:Stu s1;//定义结构体指针pStu p1;
也就是说在此处typedef的用法就是简化结构体的命名使用,其后面的名字可以和原结构体名字相同:
typedef struct student{ int age; char name;}student;
这样也是可以的
4.typedef与const变量
如下代码:
typedef int *PINT;const PINT p1;
请问此处const常量是指针p1本身还是p1指向的那个变量呢?
很多人会觉得是p1所指向的那个变量,认为是这样的: const int * p1;
其实不然:
typedef int * PINT;int main(void){ int a = 5; const PINT p1; p1 = &a; return 0;}
编译时,编译器报错:error: assignment of read-only variable ‘p1’
p1 = &a;
即p1是const常量不可改变。那么这样呢:
typedef int * PINT;int main(void){ int a = 5; PINT cosnt p1; p1 = &a; return 0;}
结果一样,编译器报错。
所以在学习C语言时,凭一己之思考是远远不够的,更多的动手实践,正所谓实践出真知!
1 0
- typedef 解析
- typedef解析
- typedef的解析
- typedef详细解析
- typedef 关键字解析
- Typedef与define解析
- typedef的解析
- typedef以及复杂数据类型解析
- struct和typedef struct的用法解析
- struct和typedef struct详细解析
- 由烦到简 解析复杂的typedef声明
- 完全解析struct和typedef struct
- typedef
- typedef
- typedef
- typedef
- typedef- -
- typedef
- oracle分区表详解
- 数据结构 串的定长顺序存储
- Jquery 和JS获取下拉列表的值
- 操作Android中联系人,通话记录,短息,的URI-项海涛
- 神来之笔之傅里叶变换(Fourier Tranformation)
- typedef解析
- es集群:禁止分片和副本分配
- String比较为什么要用equals?用==的问题
- ruby 更新到 2.3.1
- springMVC 上传和下载
- UC/OS-II学习笔记--STM32移植
- [LeetCode]N-Queens II
- iOS UIScrollView定时循环播放图片
- Oculus Utilities for Unity 插件预制体属性