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语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器的更多相关文章

  1. Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型

    Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...

  2. Android之——JNI配置C语言打印Logcat信息

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47425073 这篇文章给大家介绍一下在JNI中怎样为C语言配置打印Logcat信息 ...

  3. 【转】Android与JNI(二) -- 不错

    原文网址:http://www.cnblogs.com/eddy-he/archive/2012/08/09/2629974.html 软件版本: ubuntu10.04 java version & ...

  4. Android与JNI(二) ---- Java调用C++ 动态调用

    目录: 1. 简介 2. JNI 组件的入口函数 3. 使用 registerNativeMethods 方法 4. 测试 5. JNI 帮助方法 6. 参考资料 1. 简介 Android与JNI( ...

  5. python语言中的数据类型

    一.内存管理 1.python解释器的垃圾回收机制 垃圾:当一个值上没有人绑定任何变量名时(当引用计数为0),该值就是一个垃圾. python解释器运行时会检测值的引用计数,当引用计数=0该值会被清除 ...

  6. 2_C语言中的数据类型 (九)数组

    1          数组 1.1       一维数组定义与使用 int array[10];//定义一个一维数组,名字叫array,一共有10个元素,每个元素都是int类型的 array[0] = ...

  7. 2_C语言中的数据类型 (七)printf与scanf

    1          字符串格式化输出和输入 1.1       字符串在计算机内部的存储方式 字符串是内存中一段连续的char空间,以’\0’结尾 “”是C语言表达字符串的方式 1.2       ...

  8. 2_C语言中的数据类型 (四)整数与无符号数

    1.1       sizeof关键字 sizeof是c语言关键字,功能是求指定数据类型在内存中的大小,单位:字节 sizeof与size_t类型 1.1       int类型 1.1.1      ...

  9. C语言中各个数据类型的取值范围

    因为CPU的差异,各系统中的数据类型所占的字节数(bytes)不同,二进制位数(bit)也不同.那么怎样才能知道自己系统的数据类型的字节数,位数呢? 授之以鱼不如授之以渔,大家可以自己从电脑里获取这些 ...

随机推荐

  1. Openstack:Instance cannot ping by domain name

    Issue: When you created an instance inside Openstack, you may find that you cannot ping address by d ...

  2. Gradle 1.12用户指南翻译——第四十五章. 应用程序插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  3. Mac 下 查看 使用某端口的进程和关闭该进程的命令

    查看使用某端口的进程 最简单的命令是: lsof -i :端口号 如果要使用管理员权限那么就是: sudo lsof -i :端口号 所以查看 使用某端口号3000的进程可以使用: lsof -i : ...

  4. PHP Ajax JavaScript Json 实现天气信息获取

    使用第三方服务 间接方式 思路 使用到的服务 实现代码 前端完整代码 总结 要在自己的网站上添加一个天气预报功能,是一个很普通的需求,实现起来也不是很难.今天来介绍几个简单的方法. 使用第三方服务 有 ...

  5. Cocoa中层(layer)坐标系的极简理解

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) Cocoa层的坐标系一直理解的不清晰,现在把它整理总结一下: ...

  6. 分析MapReduce执行过程+统计单词数例子

    MapReduce 运行的时候,会通过 Mapper 运行的任务读取 HDFS 中的数据文件,然后调用自己的方法,处理数据,最后输出.Reducer 任务会接收 Mapper 任务输出的数据,作为自己 ...

  7. java原码、补码、反码总结

    1.1. java虚拟机整数 在java虚拟机中整数有byte.short.int.long四种 分别表示 8位.16位.32位.64位有符号整数.整数使用补码表示. 所以我们先了解一下原码和反码. ...

  8. 插件占坑,四大组件动态注册前奏(三) 系统BroadCast的注册发送流程

    转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52204143 前言:为什么要了解系统Activity,Service,BroadCas ...

  9. SDL2源代码分析8:视频显示总结

    ===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDL_Init()) SDL ...

  10. 手把手带你走进MVP +Dagger2 + DataBinding+ Rxjava+Retrofit 的世界

    0.0 Android开发现在的变化用一个词来形容就是 :翻天覆地 越来越多的项目使用了MVP + Rxjava+Retrofit +Dagger2 + DataBinding等等东西.. 但是这些东 ...