typedef 起别名,目的是为了编码方便。例如有一个结构体的名字是 stu,要想定义一个结构体变量就得这样写:

struct stu stu1;

struct 看起来就是多余的,但不写又会报错。如果为 struct stu 起了一个别名 STU,书写起来就简单了:

STU stu1;

写法更加简练,意义也非常明确,不管是在标准头文件中还是jni的编程实践中,都会大量使用这种别名。

语法格式为:

typedef  旧名称  新名称;

例如:

typedef int INTEGER;
INTEGER a, b;
a = 1;
b = 2;

int a,b 与INTEGER a,b等效

typedef 还可以给数组、指针、结构体等类型定义别名。先来看一个给数组类型定义别名的例子:
typedef char NAME20[20];
表示 NAME20 是类型char [20]的别名。它是一个长度为 20 的数组类型,用来存储名称的数组。接着可以用 NAME20 定义数组:

NAME20 a1, a2, s1, s2;

它等价于:

char a1[20], a2[20], s1[20], s2[20];

结构体取别名:

typedef struct Student{char name[20];int age;
} STU;

STU 是 struct Student 的别名,可以用 STU 定义结构体变量:

STU body1,body2;
它等价于:
struct Student body1, body2;

指针类型定义别名:
typedef int (*PTR_TO_ARR)[4];
表示 PTR_TO_ARR 是类型int * [4]的别名,它是一个二维数组指针类型。接着可以使用 PTR_TO_ARR 定义二维数组指针:

PTR_TO_ARR p1, p2;

按照类似的写法,还可以为函数指针类型定义别名:

typedef int (*PTR_TO_FUNC)(int, int);
PTR_TO_FUNC pfunc;
#include <stdio.h>typedef char (*PTR_TO_ARR)[30];
typedef int (*PTR_TO_FUNC)(int, int);int max(int a, int b){return a>b ? a : b;
}char str[2][30] = {"http://www.baidu.com","C语言",
};int main(){PTR_TO_ARR parr = str;PTR_TO_FUNC pfunc = max;int i;printf("max: %d\n", (*pfunc)(10, 20));for(i=0; i<2; i++){printf("str[%d]: %s\n", i, *(parr+i));}return 0;
}

typedef 是赋予现有类型一个新的名字,而不是创建新的类型。为了“见名知意”,请尽量使用含义明确的标识符,并且尽量大写。

typedef 和 #define 的区别

typedef 在表现上有时候类似于 #define,但它和宏替换之间存在一个关键性的区别。typedef 看成一种彻底的“封装”类型,声明之后不能再往里面增加别的东西。

1) 可以使用其他类型说明符对宏类型名进行扩展,但对 typedef 所定义的类型名却不能这样做。如下所示:

#define INTERGE int
unsigned INTERGE n;  //没问题typedef int INTERGE;
unsigned INTERGE n;  //错误,不能在 INTERGE 前面添加 unsigned

2) 在连续定义几个变量的时候,typedef 能够保证定义的所有变量均为同一类型,而 #define 则无法保证。例如:

#define PTR_INT int *
PTR_INT p1, p2;

经过宏替换以后,第二行变为:

int *p1, p2;

这使得 p1、p2 成为不同的类型:p1 是指向 int 类型的指针,p2 是 int 类型。

相反,在下面的代码中:

typedef int * PTR_INT
PTR_INT p1, p2;

p1、p2 类型相同,它们都是指向 int 类型的指针。

[JNI] 开发基础 (8)c语言typedef相关推荐

  1. JNI开发基础知识及编译SO(一)

    前言 本文主要介绍学习JNI从0开始学习过程的记录,包含JNI的定义,使用 以下是本篇文章正文内容 一.JNI是什么?SO是什么? JNI是Java Native Interface的缩写,它提供了若 ...

  2. c语言的程序怎么安装在ios,iOS开发基础之C语言

    为何学习iOS开发要先学C语言呢,学习c语言对ios开发有何作用. 现在越来越多的iOS开发兴趣爱好者投入到了iOS培训中,有的是已经在职的员工,有的是还在就读的学生,还有一些是完全零基础的同学,那么 ...

  3. Android Studio1.4.x JNI开发基础 - 简单实例

    接上一篇,搭建好基于Android Studio的环境之后,编写native代码相对来说也比较简单了.在Android上编写Native代码和在Linux编写C/C++代码还是有区别,Native代码 ...

  4. Android Studio1.4.x JNI开发基础-基本环境配置

    从Eclipse时代到Android Studio普及,开发工具越来越好用.早些时候还需要安装Cygwin工具,从Android Studio1.3以后,在Android 环境开发JNI程序搭建开发环 ...

  5. c语言驱动程序开发基础教程,C 语言入门介绍

    C 语言入门介绍 适用于初学者和专业人士的C语言教程采用编程方法,可帮助您轻松理解C语言教程.我们的C教程通过程序解释了每个主题. C语言是由Dennis Ritchie开发的,用于创建与硬件设备(例 ...

  6. JNI编程基础(二)——Android Studio NDK开发

    由于笔者目前的工作是Android开发,所以在JNI开发系列博客中穿插一篇AndroidStudio NDK开发介绍. 随着Android Studio 2.2的推出,Android Studio的N ...

  7. 第4章 Linux下的C语言开发基础

    第4章 Linux下的C语言开发基础 4.1 C语言开发的基本步骤 C语言源程序开发的基本步骤如下: 根据项目需求划分功能模块 编辑.利用文本编辑器vi或gedit编写C源程序并保存,文件的后缀为.c ...

  8. day50_安卓项目开发基础C语言

    01_什么是jni Java Native Interface ---- 一种协议,提供了一套编程框架 实现Java和本地代码相互调用 02_为什么需要jni 操作低层硬件,Android上面的传感器 ...

  9. c# 无法加载oraops.dll_Robotstudio软件二次开发:基于C#语言的Smart组件开发基础

    Robotstudio软件除了支持Add-Ins插件的二次开发以外,还支持Smart组件的二次开发.开发语言同样是基于.NET框架的C#语言或VB语言.Smart组件是Robotstudio软件中实现 ...

  10. 《51单片机应用开发范例大全(第3版)》——第1章 单片机C语言开发基础

    本节书摘来异步社区<51单片机应用开发范例大全(第3版)>一书中的第1章,作者:张杰 , 宋戈 , 黄鹤松 , 员玉良,更多章节内容可以访问云栖社区"异步社区"公众号查 ...

最新文章

  1. android开发--ListView中的getView原理
  2. linux系统下搭建php环境之-Discuz论坛
  3. R开发(part8)--应用R语言中的函数环境空间
  4. OpenShift 4 Hands-on Lab (5) - 用Build、Builder Trigger、Webhook构建和更新镜像
  5. LeetCode(783)——二叉搜索树结点最小距离(JavaScript)
  6. 中国碳纤维增强热塑性(CFRTP)复合材料市场趋势报告、技术动态创新及市场预测
  7. xml 文件属性修改
  8. ts文件怎么合并转换成mp4?
  9. 荣耀6plus安装linux程序,华为 荣耀6Plus驱动程序下载和安装
  10. 开博第一天,在日本做开发的日子(生活-吃货篇)
  11. mysql大于等于号
  12. 惊呆了!监控也会骗人了,视频对象一秒删除
  13. win7下 文件名太长无法删除,无法更名问题
  14. php模板如何使用,PHP自定义模板标签详细解答,让你轻松驾驭
  15. 毕业两年,只会Crud,侥幸通过面试定级 P6,没想到我也可以入职阿里!(面经分享)
  16. 加贺电子发表手掌大小的小型轻量DLP放映机
  17. css3实现好看的边框效果
  18. GeoServer入门学习:04-发布Shapfile地图数据
  19. ggplot绘制置信区间 与 分组绘图技巧
  20. 精品软件推荐 CCleaner中文版 好用的系统垃圾清理工具

热门文章

  1. 【Gym-100837E】Optimal Rest【完全背包】
  2. mat opencv 修改roi_OpenCV开发笔记(七十三):红胖子8分钟带你使用opencv+dnn+yolov3识别物体...
  3. JDK ThreadLocal解析
  4. 【转】Java中的static关键字解析
  5. RIP简易配置第二篇
  6. 一:MySQL数据库的性能的影响分析及其优化
  7. 洛谷P1005 矩阵取数游戏
  8. Collection与Arrays
  9. 《梦断代码》阅读笔记03
  10. 【POJ】【2699】The Maximum Number of Strong Kings