今天主要给大家分享Android NDK开发及相关的内容的知识,掌握Java层与Native层之间是如何进行通信的。

通过对C语言的了解,能够编写简单的C代码,并且能够将.c文件编译成可执行程序,放在Android设备上运行。

通过JNI接口可以实现Java层与底层C/C++函数进行相互调用。掌握JNI静态注册和JNI动态注册,为后面的ARM汇编、IDA分析奠定基础。

C语言的诞生是现代程序语言革命的起点。今天C语言依旧在系统编程、嵌入式编程等领域占据着统治地位。C语言由丹尼斯.里奇开发,被称为C语言之父。

1.1 C/C++概念:当代最优秀的程序设计语言

C/C++是当代最优秀的程序设计语言。C语言是C++的基础,C++和C语言在很多方面是兼容的。

C语言是一个结构化语言,它的重点在于算法与数据结构。C语言用于嵌入式开发和程序结构优化。C++首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事物)控制。

所以C语言和C++的最大区别在于它们解决问题的思想方法不一样。

1.2 C的令牌

C 程序由各种令牌组成,令牌可以是关键字、标识符、常量、字符串值,或者是一个符号。

例如:

在这里需要强调的是分号(“;”),在 C 程序中分号是语句结束符,跟汉语言里的句号(“。”)一个概念。它表明一个逻辑实体的结束,每个语句必须以分号结束。

1.3 注释

C语言有两种注释,分别是:

第一种:以“//”格式开始的是单行注释,这种注释可以单独占一行。

第二种:以“//”格式的注释可以注释单行或多行。

1.4 标识符

C标识符是用来标识变量、函数,或任何其他用户自定义项目的名称。一个标识符以字母A-Z或a-z或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。

C标识符内不允许出现关键字及特殊字符,比如@、$和%。C是区分大小写的编程语言。因此,在C语言中Manpower和manpower是两个不同的标识符。

下表已列出10个有效的标识符:

1.5 关键字

下表列出了C中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。

1.6 C指针

探究:什么是指针

指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。就像其他变量或常量一样,必须在使用指针存储其他变量地址之前,对其进行声明。

指针变量声明的一般形式为:type *yijindaxue;

type 是指针的基类型,它必须是一个有效的C数据类型,yijindaxue是指针变量的名称,星号用来声明指针,与乘法中使用的星号是相同的。但是,在这个语句中星号是用来指定一个变量是指针。

下表是有效的指针声明:

所有实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,对应指针值的类型都是一样的,都是一个代表内存地址长度为十六进制数。

实例:

探究:实例中#include 是什么?

扩展名为.h的文件是头文件,它包含C函数声明和宏定义,能被多个源文件引用共享。头文件包含两种类型,一种是程序员编写的头文件,另一种是编译器自带的头文件。在程序中要使用头文件,需要使用C预处理指令#include来引用,stdio.h头文件,它是编译器自带的头文件。

1.7 结构体

1.结构体类型

结构体是一种构造类型,它由若干成员组成。其中每一个成员都可以是一个基本数据类型,或者是一个构造类型。

声明结构体时使用的关键字是struct,声明一种结构体的一般形式为:

关键字struct表示声明结构体,其后的结构体名表示该结构的类型名,大括号中的变量构成结构的成员,也就是一般形式中的成员列表。

例如:

2.结构体变量

声明一个结构体相当于创建一种类型名,要使用新的类型名就要进行定义变量,定义的方式如下3种方式:

(1)先声明结构体类型,再定义变量

例如:struct date date1; date是结构体类型,date1是变量名。

(2)在声明结构类型时,同时定义变量

例如:

(3)直接定义结构体类型变量

例如:

类型和变量不同。只能对变量进行赋值操作,而不能对一个类型进行操作。

3.结构体变量的引用

对结构体变量进行赋值、存取或运算,实质上是对结构体成员的操作。

结构体变量成员的一般形式是:结构体变量名.成员名。

例如:

4.结构体类型的初始化

结构体类型和其它基本类型一样,也可以在定义结构体变量时指定初始化值。

例如:

5.完整的实例代码如下所示:

1.8 共用体

共用体把几种不同类型的变量存放到同一段内存单元中,所以共用体在同一时刻只能有一个值,它属于某一个数据成员。由于所有成员存放在同一个内存中,因此,共用体的大小等于最大成员的大小。

定义共用体的类型变量的一般形式为:

例如:

1.引用共用体变量

共用体变量定义完成后,就可以引用其中的成员数据进行使用。

引用的一般形式为:共用体变量.成员名;

例如:

2.共用体变量初始化

在定义共用体变量时,可以同时对变量进行初始化操作,初始化的值放在一对大括号中。

完整实例代码如下所示:

3.共用体类型的数据特点

同一个内存段可以用来存放几种不同类型的成员,但每次只能存放其中的一种类型,而不是同时存放所有的类型。共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后,原有的成员就会失去作用。

共用体变量的地址与其他各成员的地址都是同一地址。

结构体和共用体的区别:结构体是定义一个由多个数据成员组成的特殊类型,而共用体是定义一块为所有数据成员共享的内存。

1.9 文件操作

文件(File)是指一组相关数据的有序集合。

所有文件都是通过流进行输入、输出操作的。流是一个数据字节的序列,流入程序的流称为输入流;相对地,流出程序的流称为输出流。

流==>(文本流、二进制流) //二进制流 010101。

文件==>(文本文件(ASCII)、二进制文件)。

文件内容==>(源文件、目标文件、可执行文件、头文件、数据文件等)。

普通文件:指驻留在磁盘或其他外部介质上的一个有序集合。

设备文件:指与主机相连的各种外部设部,如显示器、打印机、键盘。

1.文件基本操作

文件基本操作包括文件的打开和关闭,除了标准的输入、输出文件外,其它所有的文件都必须先打开,再使用,使用结束后,必须关闭该文件。

(1)打开文件

(2)关闭文件

int fclose(FILE* p);调用fclose函数时会返回一个int值,当正常完成关闭文件操作时,返回值为0,否则返回EOF。

2.文件指针

文件指针是一个指向文件有关信息的指针,他们保存在一个结构体变量中。

3.文件结构体

4.文件读写操作

打开文件后,即可对文件进行读取和写入的操作。

5.定位文件

读写文件中的数据时,根据位置指针的位置来确定读写数据在文件中的位置。而所谓的的文件定位,是要能够根据读写要求移动文件内部读写位置指针。

fseek(文件类型指针,位移量,起始点):随机读写函数。

int rewind(文件类型指针:将文件指针重新指向一个流的开头。

long ftell(文件类型指针):返回当前文件指针。

小结

本次主要分享了C语言,对整个体系进行简单的介绍,需要掌握基本数据类型、指针、还有结构体与共用体以及文件操作常用函数,

**如果你也对安卓逆向感兴趣,可以在留言区讨论,有问题请留在评论区,看见了会为大家解答的

c语言论坛编程,[原创]了解c语言相关推荐

  1. 二级c语言上机编程技巧,二级C语言上机编程题技巧总结

    二级C语言上机编程题技巧 一. 方法总结 1. 二级C语言上机编程题在二级上机考试中属于较难题型,因此很多同学都害怕通过不了.综合 往年的考试,结合考试大纲,每年考试的编程题都有一定的规律和方法,只要 ...

  2. C语言怎样编程分子变化,C语言经典编程(一)

    <C语言经典编程(一)>由会员分享,可在线阅读,更多相关<C语言经典编程(一)(20页珍藏版)>请在人人文库网上搜索. 1.C语言经典编程(一)[程序1]题目:古典问题:有一对 ...

  3. python和c语言混合编程-python和C语言混编的几种方式

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/7594551.html 作者:窗户 Q ...

  4. 汇编和c语言混合编程缺点,汇编C语言混合编程经验总结

    ARM汇编语言和C语言混合编程 ATPCS规灾了一种模块化设计的观念,其基本内容是C模块(函数)和汇编模块(函数)相互的一套规?中还有类似的一套规晕腋芯谙呋惚喙δ芮看用有很多忌讳),厅知道(很寄几它/ ...

  5. 简述arm汇编和c语言混合编程,ARM汇编C语言混合编程

    3.4 ARM汇编&C语言混合编程 3.4.1 C内联ARM汇编 先看一个例子: # cat add.c 1 // add.c for s3c2410c board 2 // arm-linu ...

  6. C语言/C++编程学习:C语言环境设置

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  7. c语言对编程对作用,c语言编程心得体会

    c语言编程心得体会 c语言是在国内外广泛使用的一种计算机语言.以下是小编整理的c语言编程心得体会,欢迎大家阅读! c语言编程心得体会1 说到我学习c语言时,真是用千言万语呀!记得刚开始学的时候,我的c ...

  8. python与c语言混合编程_python和C语言混编的几种方式

    Python这些年风头一直很盛,占据了很多领域的位置,Web.大数据.人工智能.运维均有它的身影,甚至图形界面做的也很顺,乃至full-stack这个词语刚出来的时候,似乎就是为了描述它. Pytho ...

  9. 培训c语言程序,编程人员培训手册C语言程序设计基础

    <编程人员培训手册C语言程序设计基础>由会员分享,可在线阅读,更多相关<编程人员培训手册C语言程序设计基础(18页珍藏版)>请在人人文库网上搜索. 1.第2章:C语言程序设计基 ...

  10. 培训c语言程序,编程人员培训手册C语言程序设计基础.PPT

    编程人员培训手册C语言程序设计基础.PPT 第2章C语言程序设计基础,学习的意义,从本章开始我们正式进入C语言程序设计的学习,也许大家会问为什么我们要学习C语言呢 理由1因为C语言流行. 理由2因为C ...

最新文章

  1. 如何破解压缩文件密码-省时省力的方法
  2. 【Junit】BeforeClass、Before、After、AfterClass
  3. Router通过DHCP上网配置方法
  4. 011_AOP注解开发
  5. Leaflet中自定义marker的icon图标
  6. Magicodes.IE 在100万数据量下导入导出性能测试
  7. 【C语言】求s(n)=a+aa+aaa+...+aa...a的值
  8. 系统的本地策略不允许您采用交互式登录
  9. solr6.6初探之主从同步
  10. 小米虚拟键透明方法_小米 6 用户该换机了!小米 6 Pro 曝光
  11. 网易云解析接口PHP源码,网易云音乐热评API抓取PHP源码
  12. Linux 磁盘分区及LVM实战演练
  13. Laplacian算子-Log算子-Dog算子边缘检测原理合集及实现
  14. npm安装依赖包 版本冲突怎么办 --legacy-peer-deps的正确使用方
  15. Java实现猜拳小游戏
  16. Elasticsearch:深入理解 Dissect ingest processor
  17. 《Real-Time Rendering 4th Edition》读书笔记--简单粗糙翻译 第六章 纹理 Texturing
  18. 《MATLAB 神经网络43个案例分析》:第34章 广义神经网络的聚类算法——网络入侵聚类
  19. ERP系统的备份考虑
  20. 高考失利后选择出国留学,一年至少20万人民币到底值不值?

热门文章

  1. 关于5月份BCH硬分叉,这些你应该知道
  2. 论文图表录 出现几个 错误标签未定义的简单解决方法
  3. ERP项目实施技术要点分析
  4. html5如何引用百度地图api,WebApp如何调用百度地图API
  5. 免费国外PHP+MYSQL空间申请
  6. react18 学习(一)
  7. VR全景图之图片拼接教程
  8. QQ邮箱无法接受Python SMTP/POP邮件解决方案
  9. GBase 8s 编写使用UDR(C/Java)
  10. signature=cc1c224e1386c7abfb9e93371b44eda6,Ultrafast hot-carrier-dominated photocurrent in graphene