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;

这两种都没有结构标签,第一种只不过声明了一个typedef类型。第二种定义了一个结构变量。
第一种和下面的这个其实一样
struct simplestruct{
int i;
对第一个simplestruct.i=10;是错误的
对第二个simplestruct.i=10;是正确的

 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相关推荐

  1. R语言机器学习mlr3:数据预处理和pipelines

    获取更多R语言和生信知识,请欢迎关注公众号:医学和生信笔记 医学和生信笔记 公众号主要分享:1.医学小知识.肛肠科小知识:2.R语言和Python相关的数据分析.可视化.机器学习等:3.生物信息学学习 ...

  2. Python数据预处理和PCA、ICA、LDA降维的方法(实验代码)

    目录 1.标准差标准化 数据预处理--标准差标准化 数据预处理--离差标准化 数据预处理--非线性转换 数据预处理--归一化 数据预处理--二值化 数据预处理--独热编码 数据预处理--缺失值的插补 ...

  3. [Python从零到壹] 三十七.图像处理基础篇之图像融合处理和ROI区域绘制

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  4. 阅读react-redux源码(五) - connectAdvanced中store改变的事件转发、ref的处理和pure模式的处理

    阅读react-redux源码 - 零 阅读react-redux源码 - 一 阅读react-redux源码(二) - createConnect.match函数的实现 阅读react-redux源 ...

  5. 告别手动输入验证码!Web自动化测试带你解锁验证码处理和Cookie机制,跨越测试瓶颈!

    Web自动化之验证码处理及cookie机制 在Web自动化测试中,验证码的处理一直是一个难点.如果没有自动化处理方式,手动输入验证码将会非常耗时且容易出错.本文将为大家介绍如何通过Python实现验证 ...

  6. [Python从零到壹] 三十三.图像处理基础篇之什么是图像处理和OpenCV配置

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  7. golang框架gin的日志处理和zap lumberjack日志使用

    目录 gin自带日志 新建logger.go mian.go 引用 zap lumberjack接管gin日志 新建logger.go main.go 调用 gin框架好用,轮子也多,我也来丰富下内容 ...

  8. unity 3分钟理解 批处理和drawcall有什么区别

    3分钟理解 批处理和drawcall有什么区别? 本人技术有限,如有错误,请道友们留言讨论,切勿口吐芬芳. 正文-------------------------------------------- ...

  9. 千牛包表包下载_带有服务器端处理和VueJS组件的数据表包

    千牛包表包下载 Vue数据表 (Vue Data Table) Data Table package with server-side processing and VueJS components. ...

最新文章

  1. 网易应用创新开发者大赛成功在杭举办,十强队伍现场比拼
  2. C++类特殊成员函数
  3. VB 6.0中的数据连接模块
  4. 一份详细的服务器安全解决方案
  5. Android颜色代码对照表
  6. Discuz!NT v1.0 正式版发布
  7. php post重复提交session,PHP加Session防止表单重复提交的解决方法
  8. WPF [调用线程无法访问此对象,因为另一个线程拥有该对象。] 解决方案
  9. 2016年中国OTT盒子行业市场现状及发展前景分析
  10. Trimble天宝水准仪维修DINI03全站仪/电子水准仪维修特点
  11. swfobject.js
  12. lux视频下载工具的安装和使用
  13. [HNOI2009] 图的同构
  14. 第二章 马原刷题(1)
  15. 如何在 iPhone 和 iPad 上将你的照片转换为 PDF?
  16. 如何用C语言将华氏温度转化为摄氏温度
  17. 树莓派 PHP白屏,树莓派系统安装及3.5寸显示屏白屏解决办法
  18. 【POJ3683】Priest John's Busiest Day(Special Judge)
  19. java 多张jpg合成tif后避免tif文件过大的方法
  20. JNI(4) JNI Functions

热门文章

  1. LinkedList源码阅读笔记(1.8)
  2. 自己动手构造编译系统:编译、汇编与链接2.1.4 语义分析
  3. Matlab定义符号函数(ZZ)
  4. 《课程的反思与重建--我们需要什么样的课程观》之学习体会
  5. Oracle关于时间/日期的操作
  6. Leetcode Math刷题笔记
  7. oracle约束的相关总结
  8. python服务器环境搭建(2)——安装相关软件
  9. golang ide 升级
  10. 电商商城系统活动设计