[JNI] 开发基础 (8)c语言typedef
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相关推荐
- JNI开发基础知识及编译SO(一)
前言 本文主要介绍学习JNI从0开始学习过程的记录,包含JNI的定义,使用 以下是本篇文章正文内容 一.JNI是什么?SO是什么? JNI是Java Native Interface的缩写,它提供了若 ...
- c语言的程序怎么安装在ios,iOS开发基础之C语言
为何学习iOS开发要先学C语言呢,学习c语言对ios开发有何作用. 现在越来越多的iOS开发兴趣爱好者投入到了iOS培训中,有的是已经在职的员工,有的是还在就读的学生,还有一些是完全零基础的同学,那么 ...
- Android Studio1.4.x JNI开发基础 - 简单实例
接上一篇,搭建好基于Android Studio的环境之后,编写native代码相对来说也比较简单了.在Android上编写Native代码和在Linux编写C/C++代码还是有区别,Native代码 ...
- Android Studio1.4.x JNI开发基础-基本环境配置
从Eclipse时代到Android Studio普及,开发工具越来越好用.早些时候还需要安装Cygwin工具,从Android Studio1.3以后,在Android 环境开发JNI程序搭建开发环 ...
- c语言驱动程序开发基础教程,C 语言入门介绍
C 语言入门介绍 适用于初学者和专业人士的C语言教程采用编程方法,可帮助您轻松理解C语言教程.我们的C教程通过程序解释了每个主题. C语言是由Dennis Ritchie开发的,用于创建与硬件设备(例 ...
- JNI编程基础(二)——Android Studio NDK开发
由于笔者目前的工作是Android开发,所以在JNI开发系列博客中穿插一篇AndroidStudio NDK开发介绍. 随着Android Studio 2.2的推出,Android Studio的N ...
- 第4章 Linux下的C语言开发基础
第4章 Linux下的C语言开发基础 4.1 C语言开发的基本步骤 C语言源程序开发的基本步骤如下: 根据项目需求划分功能模块 编辑.利用文本编辑器vi或gedit编写C源程序并保存,文件的后缀为.c ...
- day50_安卓项目开发基础C语言
01_什么是jni Java Native Interface ---- 一种协议,提供了一套编程框架 实现Java和本地代码相互调用 02_为什么需要jni 操作低层硬件,Android上面的传感器 ...
- c# 无法加载oraops.dll_Robotstudio软件二次开发:基于C#语言的Smart组件开发基础
Robotstudio软件除了支持Add-Ins插件的二次开发以外,还支持Smart组件的二次开发.开发语言同样是基于.NET框架的C#语言或VB语言.Smart组件是Robotstudio软件中实现 ...
- 《51单片机应用开发范例大全(第3版)》——第1章 单片机C语言开发基础
本节书摘来异步社区<51单片机应用开发范例大全(第3版)>一书中的第1章,作者:张杰 , 宋戈 , 黄鹤松 , 员玉良,更多章节内容可以访问云栖社区"异步社区"公众号查 ...
最新文章
- android开发--ListView中的getView原理
- linux系统下搭建php环境之-Discuz论坛
- R开发(part8)--应用R语言中的函数环境空间
- OpenShift 4 Hands-on Lab (5) - 用Build、Builder Trigger、Webhook构建和更新镜像
- LeetCode(783)——二叉搜索树结点最小距离(JavaScript)
- 中国碳纤维增强热塑性(CFRTP)复合材料市场趋势报告、技术动态创新及市场预测
- xml 文件属性修改
- ts文件怎么合并转换成mp4?
- 荣耀6plus安装linux程序,华为 荣耀6Plus驱动程序下载和安装
- 开博第一天,在日本做开发的日子(生活-吃货篇)
- mysql大于等于号
- 惊呆了!监控也会骗人了,视频对象一秒删除
- win7下 文件名太长无法删除,无法更名问题
- php模板如何使用,PHP自定义模板标签详细解答,让你轻松驾驭
- 毕业两年,只会Crud,侥幸通过面试定级 P6,没想到我也可以入职阿里!(面经分享)
- 加贺电子发表手掌大小的小型轻量DLP放映机
- css3实现好看的边框效果
- GeoServer入门学习:04-发布Shapfile地图数据
- ggplot绘制置信区间 与 分组绘图技巧
- 精品软件推荐 CCleaner中文版 好用的系统垃圾清理工具
热门文章
- 【Gym-100837E】Optimal Rest【完全背包】
- mat opencv 修改roi_OpenCV开发笔记(七十三):红胖子8分钟带你使用opencv+dnn+yolov3识别物体...
- JDK ThreadLocal解析
- 【转】Java中的static关键字解析
- RIP简易配置第二篇
- 一:MySQL数据库的性能的影响分析及其优化
- 洛谷P1005 矩阵取数游戏
- Collection与Arrays
- 《梦断代码》阅读笔记03
- 【POJ】【2699】The Maximum Number of Strong Kings