Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器
Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器
当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型,函数之内的
我们先来看一张传播久远的图片‘
一.各种数据类型介绍
整型
整形包括短整型、整形和长整形。
短整形
short a=1;
整形
一般占4个字节(32位),最高位代表符号,0表示正数,1表示负数,取值范围是-2147483648~2147483647,在内存中的存储顺序是地位在前、高位在后,例如0x12345678在内存中的存储如下:
地址:0x0012ff78 0x0012ff79 0x0012ff7a 0x0012ff7b
数据: 78 56 34 12
定义:用int关键字,举例如下:
int a=6;
长整形
long a=10;
浮点型
浮点型包括单精度型和双精度型。
单精度型
浮点型,又称实型,也称单精度。一般占4个字节(32位),
float a=4.5;
地址:0x0012ff78 0x0012ff79 0x0012ff7a 0x0012ff7b
数据: 00 00 90 40
双精度型
一般占8个字节(64位)
double a=4.5;
地址:0x0012ff78 0x0012ff79 0x0012ff7a 0x0012ff7b 0x0012ff7c 0x0012ff7d 0x0012ff7e 0x0012ff7f
数据: 00 00 00 00 00 00 12 40
字符类型
在各种不同系统中,字符类型都占一个字节(8位)。定义如下:
char c=’a’;
也可以用字符对应的ASCII码赋值,如下:
char c=97;
其实我们可以用一串代码来阐述上面的意思
#include <stdio.h>
#include <stdlib.h>
main(){
//基本数据类型:char int float long short double signed unsigned
int i = 3;
char a = 'c';
//int的格式说明符 %d
printf("i的值为%d",i);
//char的格式说明符
printf ("a的值为%c",a);
system("pasue");
//通用输出
system("通用输出%d",sizeof(short));
// char int float long shortd的用法和JAVA类似
//我们提一下signed unsigned
//signed:有符号 unsigned 无符号
//举个例子
signed int i = 3; //分正负
unsigned int i2 = 3; //不分正负
//字节长度char 1 int 4 float 4 long 4 short 2 double 8
}
是不是清晰明了了,然而我们也是从JAVA走过来的,这些基本上可以一笔带过了,我们接下来看下C中的函数
二.输出函数
这里我们温习一下上面说到的输出函数
- %d - int
- %ld – long int
- %lld - long long
- %hd – 短整型
- %c - char
- %f - float
- %lf – double
- %u – 无符号数
- %x – 十六进制输出 int 或者long int 或者short int
- %o - 八进制输出
%s – 字符串
Int len;
- Scanf(“%d”,&len);
因为这个JAVA中没有,所以这里还是要提一下的
//C的数组[]要写在后面 ,而且这个 数组的长度为 8,因为他有一个结束符 \0
char str [] = {'a','n','d','r','o','i','d',};
char str [] = "可以输入"; //9个字节长度
三.输入函数
输入函数大家也不陌生,在JAVA中也有,JAVA的代码一般都是这样的
import java.io.*;
public class Test1 {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
String str = stdin.readLine();
System.out.println(str);
}
}
这样就可以在控制台输入东西了,但是C就简单多了,上面也提到了一个函数 scanf(“%d”,&len);,我们来看看具体怎么用
#include <stdio.h>
#include <stdlib.h>
//输入函数
main(){
printf("请输入你的年龄:");
//定义一个变量
int age ;
//设置输入的类型为int
scanf("%d",&age);
printf("你的年龄为:%d\n",age);
system("pause");
}
这样我们来运行一下:
这样就OK了
四.内存地址
内存这一块,C是可以直接去操作的,这就是他的优势,同时也是他比较难的一块了,我们要好好的磨一磨了,内存地址就是内存的地址,内存中所以数据都是通过地址拿到的,就像findviewbyid一样,我们来看个例子
#include <stdio.h>
#include <stdlib.h>
main(){
int i ; //当i声明的时候,内存中开辟一个空间,四个字节,无值,分配一个地址
i = 5; //给地址一个值
printf("%d\n",i); //当我们要输出这个i的时候其实是通过地址拿到这个5的
//获取内存地址
printf("%#x",&i);
//让窗口停留
int age ;
scanf("%d",&age);
}
我们通过这行代码来获取i的值以及i的地址,打印的结果
我们为了更形象的说明,打个比方,比如电脑的系统有32和64位区分,32位的系统最大支持的是4G内存,这是因为32位的系统内存总线的长度为32,也就是可以分配给内存作为地址的数字是2的32次方个
五.内存修改器
修改内存,就像打游戏一样,你的血量为100,其实就是在内存中定义一个变量,比如int blood = 100,这个blood在内存中开辟一个空间,赋值为100,然后再进行其他操作,我们写个小例子
#include <stdio.h>
#include <stdlib.h>
main(){
//时间为60s过关
int time = 60;
int i ;
//打印i的地址
printf("%#x\n",&i);
for(i = time;i>=0;i--){
printf("剩余时间为%d\n",i);
//睡眠,达到递减的效果
sleep(1000);
}
//让窗口停留
int age ;
scanf("%d",&age);
}
逻辑应该看得懂吧,我们定义一个i,然后获取他的内存地址,再让他进行倒计时一样的操作,这就模拟了打游戏,比如一分钟通关之内的游戏,我们修改i的内存,达到内存修改器的效果
然后我们就可以下载Cheat Engine,这个是内存修改器,和八门神器的原理差不多
下载地址自己去网上找吧,具体的用法,大家可百度
当我们把内存冻结了之后
你就达到了修改游戏的效果了,永远不会到0,也就不会死了,这里也只是阐述一个原理哦!
似乎节奏越来越快了,下节我们学习下指针,这样就会对C有一个清晰的认识了,早点把这块学完,对自己也是有莫大的好处的!
Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器的更多相关文章
- Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型
Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...
- Android之——JNI配置C语言打印Logcat信息
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47425073 这篇文章给大家介绍一下在JNI中怎样为C语言配置打印Logcat信息 ...
- 【转】Android与JNI(二) -- 不错
原文网址:http://www.cnblogs.com/eddy-he/archive/2012/08/09/2629974.html 软件版本: ubuntu10.04 java version & ...
- Android与JNI(二) ---- Java调用C++ 动态调用
目录: 1. 简介 2. JNI 组件的入口函数 3. 使用 registerNativeMethods 方法 4. 测试 5. JNI 帮助方法 6. 参考资料 1. 简介 Android与JNI( ...
- python语言中的数据类型
一.内存管理 1.python解释器的垃圾回收机制 垃圾:当一个值上没有人绑定任何变量名时(当引用计数为0),该值就是一个垃圾. python解释器运行时会检测值的引用计数,当引用计数=0该值会被清除 ...
- 2_C语言中的数据类型 (九)数组
1 数组 1.1 一维数组定义与使用 int array[10];//定义一个一维数组,名字叫array,一共有10个元素,每个元素都是int类型的 array[0] = ...
- 2_C语言中的数据类型 (七)printf与scanf
1 字符串格式化输出和输入 1.1 字符串在计算机内部的存储方式 字符串是内存中一段连续的char空间,以’\0’结尾 “”是C语言表达字符串的方式 1.2 ...
- 2_C语言中的数据类型 (四)整数与无符号数
1.1 sizeof关键字 sizeof是c语言关键字,功能是求指定数据类型在内存中的大小,单位:字节 sizeof与size_t类型 1.1 int类型 1.1.1 ...
- C语言中各个数据类型的取值范围
因为CPU的差异,各系统中的数据类型所占的字节数(bytes)不同,二进制位数(bit)也不同.那么怎样才能知道自己系统的数据类型的字节数,位数呢? 授之以鱼不如授之以渔,大家可以自己从电脑里获取这些 ...
随机推荐
- 独立开发一个云(PaaS)的核心要素, Go, Go, Go!!!
最近一年的工作,有很大的比重在做云平台的事情,简单来说,就是为公司内用户提供一个PaaS,用户可以在我们的云平台上方便的将单机服务程序扩展为多实例程序,以平台服务化的方式对外提供.在这里简单分享一下. ...
- 微信小程序基础之交互操作控件
好久没有写关于微信小程序的文章了,今天简单的发表一篇,内容比较简单,包括:ActionSheet上拉菜单.AlertAction提示框.SuccessAction完成框.LoadingAction加载 ...
- mysql进阶(二十六)MySQL 索引类型(初学者必看)
mysql进阶(二十六)MySQL 索引类型(初学者必看) 索引是快速搜索的关键.MySQL 索引的建立对于 MySQL 的高效运行是很重要的.下面介绍几种常见的 MySQL 索引类型. 在数 ...
- 使用jQuery AJAX读取二进制数据
READING BINARY DATA USING JQUERY AJAX http://www.henryalgus.com/reading-binary-files-using-jquery-aj ...
- unix下快速混淆源代码
只能算雕虫小技,但可以快速简单的做混淆,如下: #vapyhqr <fgqvb.u> #vapyhqr <fgqyvo.u> #vapyhqr <fgqobby.u> ...
- JDK8帮助文档生成-笔记
JDK8 出来了,以前习惯了使用.CHM文件来查看API,现在想也这样,这里自己制作了一下,记录一下. 1.需要的工具: ①JD2CHM;②API文档③HTMLlHelper 遇到的问题主要是不知道去 ...
- UNIX网络编程——使用select函数编写客户端和服务器
首先看原先<UNIX网络编程--并发服务器(TCP)>的代码,服务器代码serv.c: #include<stdio.h> #include<sys/types.h> ...
- Android PackageManager源码浅析以及静默安装实现方式
Aandroid应用管理 >http://blog.csdn.net/sk719887916/article/details/50314017 skay整理. >201 ...
- Maya人物骨骼创建与蒙皮
参考: HumanIK骨架的使用与蒙皮的操作 注意事项: 1. 编辑好骨骼一侧后,可删除另一侧,并使用镜像操作.镜像操作可以指定替换生成骨骼的名字中的子字符串. 2. 如果在编辑骨骼的时候由删除添加过 ...
- cocos2d-js(二)cocos2d-js的基本语法与类的简介
基本语法: 1.类的定义 一般类都是集成Scene或者Layer: var myLayer = cc.Layer.extend({类的内容}); 2类内的成员变量与方法: 2.1成员变量的声明: 变量 ...