C语言小知识:typedef\函数模板\
(1)typedef用法:
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
//1、typedef的最简单使用
typedef long byte_4;//给已知数据类型long起个新名字,叫byte_4。
//2、typedef与结构结合使用
typedef struct tagMyStruct
{
int iNum;
long lLength;
}MyStruct;//这语句实际上完成两个操作:1),2);
//1) 定义一个新的结构类型
struct tagMyStruct
{
int iNum;
long lLength;
};
//分析:tagMyStruct称为“tag”,即“标签”,实际上是一个临时名字,struct关键字和tagMyStruct一起,构成了这个结构类型,不论是否有typedef,这个结构都存在。
//我们可以用struct tagMyStruct varName来定义变量,但要注意,使用tagMyStruct varName来定义变量是不对的,因为struct 和tagMyStruct合在一起才能表示一个结构类型。
//2) typedef为这个新的结构起了一个名字,叫MyStruct。
typedef struct tagMyStruct MyStruct;
因此,MyStruct实际上相当于struct tagMyStruct,我们可以使用MyStruct varName来定义变量。
(2)函数模板与模板函数
这期间有涉及到函数模板与模板函数,类模板与模板类的概念 (类似于类与类对象的区别)
注意:模板类的函数声明和实现必须都在头文件中完成,不能像普通类那样声明在.h文件中,实现在.cpp文件中。
1、函数模板和模板函数
函数模板:函数模板的重点是模板。表示的是一个模板,专门用来生产函数。
template <typename T>
void fun(T a)
{
}
模板函数:是函数模板的实例化,是一个函数。
fun(7);//隐式生成fun <int>
fun(3.9);//隐式生成fun <double>
fun(‘b’);//隐式生成fun <char>
Shape* ps = new Cirlcle;
fun(ps);//隐式生成fun <Shape*>
2、类模板和模板类
类模板:类模板的重点是模板。表示的是一个模板,专门用于产生类的模子。
template <typename T>
class Vector
{
};
模板类:类模板的实例化,是一个包含具体数据类型的类
函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。即函数模板允许隐式调用和显式调用而类模板只能显示调用。
C语言小知识:typedef\函数模板\相关推荐
- C语言小知识---printf()函数
说起printf()函数,写代码的同学肯定都很熟悉,这是C语言中标准的打印函数,在调试代码或者信息输出的时候会经常用到. 其中printf函数的转换说明如下: 转换说明修饰符 printf()中的 ...
- C语言小知识---printf()函数转换符的意义
printf()函数大家已经很熟悉了,它的转换符在打印数据的时候也会经常使用,比如%c,%d,%f等.那么为什么打印的时候一定需要转换符呢?系统难道不能自动识别吗?转换符存在的意义又是什么? ...
- 纸上得来终觉浅(c语言小知识总结)
纸上得来终觉浅(c语言小知识总结) 1.数组的初始定义 对于一个初始定义的数组,内部的值是随机的,若用{}(哪怕其中没有元素)也会让数组内元素初始化,默认为0. 若是用循环语句进行赋值,在一个长度为2 ...
- eem二级c语言题库哪种比较好,c语言小知识,供初学者参考
1 用预处理指令 define 声明一个常数 用以表明 1 年中有多少秒 忽略闰年问题 define SECONDS PER YEAR 60 60 24 365 UL 2 写一个 标准 宏 MIN 这 ...
- C++ TGP 模板基础知识--01函数模板
基本范例 模板的定义是以template关键字开头 类型模板参数T前面用typename来修饰,所以遇到typename就知道其后面跟的是一个类型,typename可以用class取代 类型模板参数T ...
- C语言宏定义制作函数模板
一.介绍 当做协议栈或者批量化函数的时候,内容框架是固定的,如果要写1000个10000个函数确实手敲比较麻烦,一种是用工具批量产生这些函数,另一种就是宏定义,这里给出宏定义解决的方法,利用宏定义制作 ...
- c语言函数编写格式,在c语言中如何实现函数模板?
如果要写个函数支持多种数据类型,首先想到的就是C++的模板了,但是有时候只能用C语言,比如在linux内核开发中,为了减少代码量,或者是某面试官的要求- 考虑了一阵子后,就想到了qsort上.qsor ...
- C语言小知识---递归函数的使用
C语言允许函数自身调用自身,这种调用就被称为递归.好多人刚开始学习递归的时候,往往被一层层嵌套调用搞糊涂了,搞不清楚到底是怎么调用的?现在就通过一个小例子来演示一下,递归调用时,函数是如何运行的. ...
- C语言小知识---为什么要使用指针
刚开始学习C语言的时候,感觉最难理解的就是指针,什么指针变量,变量指针,指向指针的变量,指向变量的指针?一堆概念,搞得人云里雾里的,今天不讨论这些概念的问题,从最底层来分析C语言中为什么要使用指针 ...
最新文章
- antd Form.Item 中如何获取到Select的label值
- 让SEQUENCE记录不变的信息【RECORD STATIC NUMBER IN SEQUENCE】
- 收发电子邮件属于计算机在方面的应用,计算机应用基础复习题(供参考).doc
- QML 信号和处理程序事件系统
- css表格文字超数量就竖排_求助!!一个非常棘手的问题。就是文字竖排显示的问题...
- Linux操作系统基础解析之(五)——grep命令家族及正则表达式初识
- 中间的数(若已经排好序)
- 计算机操作系统(7):进程的基本概念
- 数据库加一列,cursor:pointer
- ubuntu 串口调试工具推荐_谈一谈单片机开发的几种调试方案
- LdCms.NetCore轻量级的网站内容管理系统
- [转]VI/VIM的键盘图
- 机智云产品、功能、服务一览表
- 图标字体化 android,Android 优化 图标文字 iconfont
- java的睡眠方式有几种_java的几种定时任务
- 【组合数学】组合恒等式 ( 八个组合恒等式回顾 | 组合恒等式 积 1 | 证明 | 使用场景 | 求组合数通用方法 )
- IDEA代码格式化快捷键
- 扫雷源代码(HTML)
- 机器学习中矩阵求导法则
- Overlay 网络 VXLAN 技术解析
热门文章
- CentOS7下启动Nginx出现Failed to start nginx.service:unit not found
- OPPO海外官方调试ID
- ValueError: not enough values to unpack (expected 2, got 1)
- Android中设置控件可见与不可见详解
- 导入第三方工程报错的处理方法
- Web Service 安全性解决方案(SOAP篇)
- C#实现有向无环图(DAG)拓扑排序
- 周一02.3运行python程序的两种方式
- Object.keys方法之详解
- 目标反射回波检测算法及其FPGA实现 之一:算法概述