预处理和typedef
1.typedef 和#define
首先,#define是预处理,语句后面不需要分号
其次,注意下面两个区别
#define string_d char *
typedef char * string_t;
string_d s1,s2;
string_t s3,s4;
|
s1,s3,s4都被声明为char *,而s2被声明为char。
所以用于处理指针时,最好使用typedef。
2.
typedef struct
{
char *item;
NODEPTR next;
}*NODEPTR;
|
但是编译器报告了错误信息,难道在c语言中结构不能包含指向自己的指针吗?
c语言中结构当然能包括指向自己的指针,这个问题在于typedef。不能在定义typedef前使用它,在上面的例子中,在next域声明的地方还没有定义NODEPTR。要解决这个问题。首先赋予这个结构一个标签(“struct node"),然后声明next域为("struct node *"),或者分开typedef声明还结构定义,或者两者都采纳,以下是修正后的一个版本。
typedef struct node{
char *item;
struct node * next;
}*NODEPTR;
|
也可以在声明结构之前先用typedef,然后就可以在声明中使用类型定义NODEPTR了,下面这种情况在struct node 还没有完全定义的情况下就使用它来声明一个新的typedef
,这是允许的。
struct node; //在使用前先声明
typedef struct node *NODEPTR;
struct node{
char *item;
NODEPTR next;
}; //这个可以叫做定义
|
最后这是一种两种情况都采用的方法。
struct node{
char *item;
struct node * next;
}; //从这里也可以看出,定义结构时,结构变量可以是指向自己的指针
typedef struct node * NODEPTR;
|
3.注意以下两种区分
typedef struct {
int i;
}simplestruct;
struct {
int i;
}simplestruct;
|
4.
typedef int (*funcptr) ();
|
这个是什么意思?它定义了一个类型funcptr,表示指向返回值为int的函数的指针。它可以用来声明一个或多个函数指针
funcptr fp1,fp2;
这个声明等价于以下的写法
int (*fp1) ( ), (*fp2) ( );
typedef int Long_int[3];
|
Long_int a;
相当于int a[3];
typedef int arr[5];
typedef arr Array[10];
|
Array a;
相当于int a[10][5];
预处理和typedef相关推荐
- R语言机器学习mlr3:数据预处理和pipelines
获取更多R语言和生信知识,请欢迎关注公众号:医学和生信笔记 医学和生信笔记 公众号主要分享:1.医学小知识.肛肠科小知识:2.R语言和Python相关的数据分析.可视化.机器学习等:3.生物信息学学习 ...
- Python数据预处理和PCA、ICA、LDA降维的方法(实验代码)
目录 1.标准差标准化 数据预处理--标准差标准化 数据预处理--离差标准化 数据预处理--非线性转换 数据预处理--归一化 数据预处理--二值化 数据预处理--独热编码 数据预处理--缺失值的插补 ...
- [Python从零到壹] 三十七.图像处理基础篇之图像融合处理和ROI区域绘制
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- 阅读react-redux源码(五) - connectAdvanced中store改变的事件转发、ref的处理和pure模式的处理
阅读react-redux源码 - 零 阅读react-redux源码 - 一 阅读react-redux源码(二) - createConnect.match函数的实现 阅读react-redux源 ...
- 告别手动输入验证码!Web自动化测试带你解锁验证码处理和Cookie机制,跨越测试瓶颈!
Web自动化之验证码处理及cookie机制 在Web自动化测试中,验证码的处理一直是一个难点.如果没有自动化处理方式,手动输入验证码将会非常耗时且容易出错.本文将为大家介绍如何通过Python实现验证 ...
- [Python从零到壹] 三十三.图像处理基础篇之什么是图像处理和OpenCV配置
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- golang框架gin的日志处理和zap lumberjack日志使用
目录 gin自带日志 新建logger.go mian.go 引用 zap lumberjack接管gin日志 新建logger.go main.go 调用 gin框架好用,轮子也多,我也来丰富下内容 ...
- unity 3分钟理解 批处理和drawcall有什么区别
3分钟理解 批处理和drawcall有什么区别? 本人技术有限,如有错误,请道友们留言讨论,切勿口吐芬芳. 正文-------------------------------------------- ...
- 千牛包表包下载_带有服务器端处理和VueJS组件的数据表包
千牛包表包下载 Vue数据表 (Vue Data Table) Data Table package with server-side processing and VueJS components. ...
最新文章
- 网易应用创新开发者大赛成功在杭举办,十强队伍现场比拼
- C++类特殊成员函数
- VB 6.0中的数据连接模块
- 一份详细的服务器安全解决方案
- Android颜色代码对照表
- Discuz!NT v1.0 正式版发布
- php post重复提交session,PHP加Session防止表单重复提交的解决方法
- WPF [调用线程无法访问此对象,因为另一个线程拥有该对象。] 解决方案
- 2016年中国OTT盒子行业市场现状及发展前景分析
- Trimble天宝水准仪维修DINI03全站仪/电子水准仪维修特点
- swfobject.js
- lux视频下载工具的安装和使用
- [HNOI2009] 图的同构
- 第二章 马原刷题(1)
- 如何在 iPhone 和 iPad 上将你的照片转换为 PDF?
- 如何用C语言将华氏温度转化为摄氏温度
- 树莓派 PHP白屏,树莓派系统安装及3.5寸显示屏白屏解决办法
- 【POJ3683】Priest John's Busiest Day(Special Judge)
- java 多张jpg合成tif后避免tif文件过大的方法
- JNI(4) JNI Functions