一文搞懂C语言typedef关键字
一、typedef VS #define
在开始说明typedef关键字之前,我想先试着区分一下typedef和define宏定义。例如:
/*#define 形式*/
#define COUNT int
/*typedef形式 */
typedef int COUNT;
typedef与**#define**有相似之处,上述两条语句的作用都是用COUNT代替int。但是事实上,他们二者是不同的。#define 是在预编译时处理的,它只能做简单的字符串替换,二typedef是在编译时处理的,实际上,它并不是作简单的字符串替换,而是采用如同定义变量的方法那样来声名一个类型。
- 案例1:
/*使用typedef方式*/
typedef int COUNT,*PCOUNT;
int main()
{COUNT a = 520;PCOUNT b,c;b = &a;c = b;printf("address of a = %p\n",&a);printf("address of a = %p\n",b);printf("address of a = %p\n",c);
}
- 案例2:
/*使用#define方式*/
#include <stdio.h>
#include <stdlib.h>
#define COUNT int
#define PCOUNT int*
int main()
{COUNT a = 520;PCOUNT b,c;b = &a;c = b;printf("address of a = %p\n",&a);return 0;
}
案例2虽然也能编译成功,但是会出现这样一个警告,大意就是b是指针变量,而c是一个int变量,两种不同类型的变量理论上是不能赋值的!
- 但为什么会出现警告呢?
- 因为#define只是单纯地进行文本替换,所以PCOUNT<=>int*,PCOUNT b,c<=>int b,c*;是不是似曾相识,这不就是我们定义一个指针变量,一个int变量的写法吗!
二、基础typedef
废话不说,直接案例说明!
typedef为变量起别名
- 案例3:
typedef int COUNT,*PCOUNT;
int main()
{COUNT a = 520;PCOUNT b,c;b = &a;c = b;printf("address of a = %p\n",&a);printf("address of a = %p\n",b);printf("address of a = %p\n",c);
}
typedef为结构体起别名
- 案例4:
#include <stdio.h>
#include <stdlib.h>
typedef struct Date
{int year;int month;int day;
}DATE,*PDATE;int main()
{PDATE time; // PDATE time<=>DATE* time<=>struct Date* timetime = (PDATE)malloc(sizeof(DATE));printf("请输入年份:");scanf("%d",&time->year);printf("请输入月:");scanf("%d",&time->month);printf("请输入日:");scanf("%d",&time->day);printf("%d-%d-%d",time->year,time->month,time->day);return 0;
}
一文搞懂C语言typedef关键字相关推荐
- 一文搞懂C语言回调函数
转载自:https://segmentfault.com/a/1190000008293902?utm_source=tag-newest 博主:Rdou Typing 来源:segmentfault ...
- c语言字符串截取_一文搞懂 C 语言 #、##、__VA_ARGS__
1'#' 和 '##' 属于预处理标记.'#' 和 '##' 用于类似函数的宏定义中(或者简称为宏定义函数).2'__VA_ARGS__' 是 C99 引入的用于支持宏定义函数中使用可变参数. 操作符 ...
- 一文搞懂C语言如何用指针来代替变量和数组进行数据的存储
众所周知,指针的用法最常见的无外乎两种,一种是用指针来指向变量的内存地址,通过操控指针进而可以间接的操控变量.另外一种是把指针当成变量来使用,像变量一样可以存储数据.数组也是类似的道理,因为数组实 ...
- 一文搞懂C语言文件操作
一.文件分类 根据数据的组织形式,可以将文件分为文本文件和二进制文件.通俗讲,文本文件就是你能看懂的,而二进制文件是你看不懂的! 二.文件打开与关闭 假设已经定义了一个文件指针 FILE *fp; 有 ...
- 一文搞懂Go语言的plugin
要历数Go语言中还有哪些我还没用过的特性,在Go 1.8版本[1]中引入的go plugin[2]算一个.近期想给一个网关类平台设计一个插件系统,于是想起了go plugin^_^. Go plugi ...
- 【C语言】一文搞懂C语言文件操作
文章目录 0. 前言 1. 为什么使用文件? 2. 什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 3. 文件的打开和关闭 3.1 文件信息区 3.2 文件指针 3.3 文件的打开和关 ...
- python语言语句快的标记是什么_一文搞懂Python程序语句
原标题:一文搞懂Python程序语句 程序流 Python 程序中常用的基本数据类型,包括: 内置的数值数据类型 Tuple 容器类型 String 容器类型 List 容器类型 自然的顺序是从页面或 ...
- 一文搞懂transient关键字
一文搞懂transient关键字 1.序列化 1.1 什么是序列化 1.2 以文件存储为例实现序列化 2.transient关键字 2.1 添加transient关键字 2.2 静态变量不需要加tra ...
- 面试官问你斐波那契数列的时候不要高兴得太早 搞懂C语言函数指针 搜索引擎还可以这么玩? 那些相见恨晚的搜索技巧...
面试官问你斐波那契数列的时候不要高兴得太早 前言 假如面试官让你编写求斐波那契数列的代码时,是不是心中暗喜?不就是递归么,早就会了.如果真这么想,那就危险了. 递归求斐波那契数列 递归,在数学与计算机 ...
最新文章
- 2011年中国程序员薪水调查报告
- 【STM32】FreeRTOS 任务切换
- class std::vectorclass std::basic_stringchar,struct std::char_traitschar,class std::allocatorch
- 排序算法以及其java实现
- 大学期末c语言作业演示,大学C语言期末考试练习题(带详解答案)
- 记录一次SQL优化,增加索引,随便写的当笔记了
- 设置熄屏_刚买的手机微信收不到信息提醒耽误事情,手机到手一定要这样设置...
- 在scrapy中parse函数里面xpath的内容打印不出来_如何正确的使用Scrapy ?
- JAVA内部类示例分析
- 华为厉害了:已启动6G网络技术研究
- java线程池相关总结
- 盐城哪里学计算机表格,盐城办公自动化周末班
- ubuntu安装hexo博客
- 6自由度机械臂的建立
- Error parsing INI config file: the argument ('true??') for option 'logappend' is invalid.
- 服务器2003设置共享文件夹共享文件夹,WinServer2003 文件夹共享 方法设置
- 手机html在哪个文件里,手机相册在哪个文件夹,教您手机图片存放在哪里
- 读取计算机内存卡,手机内存卡无法读取怎么办 读取手机内存卡详细方法【详细步骤】...
- matlab里newc,Matlab超简单教程
- 中国汽车原始设备制造商的厂内物流市场趋势报告、技术动态创新及市场预测
热门文章
- 数据库设计中,多对多关系使用使用逗号分割关联讨论
- CSS3属性之text-overflow:ellipsis,指定多行文本中任意一行显示...
- JAVA --BYTECODE
- 2017.3.24组合数学学习——容斥原理
- ASP.NET %%,%=%,%#%区别
- linux 下启动jar小程序
- IIS下的FTP使用
- .net中关键字new的用法
- Go(GoLang)解决 cannot find package/golang.org/问题 Grpc+ProtoBuf所需的一些资源
- linux查看服务器网络状态