c语言处理地址中的数据类型,Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器...

本文介绍了C语言的基本数据类型,包括整型、浮点型、字符型及其内存存储方式。讲解了输出函数如%d、%c、%f等的使用,以及输入函数scanf的用法。同时,探讨了C语言如何直接操作内存地址,并通过实例展示了内存修改的概念。最后,预告了下篇将讨论C语言中的指针,帮助读者更好地理解C语言。
摘要由CSDN通过智能技术生成

Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器

当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型,函数之内的

我们先来看一张传播久远的图片‘

225ab517d5c9b12902698d0aa9a9b60f.png

一.各种数据类型介绍

整型

整形包括短整型、整形和长整形。

短整形

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

#include

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

#include

//输入函数

main(){

printf("请输入你的年龄:");

//定义一个变量

int age ;

//设置输入的类型为int

scanf("%d",&age);

printf("你的年龄为:%d\n",age);

system("pause");

}

这样我们来运行一下:

52e756b1fe023715b8438ce9b3e846eb.png

这样就OK了

四.内存地址

内存这一块,C是可以直接去操作的,这就是他的优势,同时也是他比较难的一块了,我们要好好的磨一磨了,内存地址就是内存的地址,内存中所以数据都是通过地址拿到的,就像findviewbyid一样,我们来看个例子

#include

#include

main(){

int i ; //当i声明的时候,内存中开辟一个空间,四个字节,无值,分配一个地址

i = 5; //给地址一个值

printf("%d\n",i); //当我们要输出这个i的时候其实是通过地址拿到这个5的

//获取内存地址

printf("%#x",&i);

//让窗口停留

int age ;

scanf("%d",&age);

}

我们通过这行代码来获取i的值以及i的地址,打印的结果

11ae317441a526492918c3c82e2f05f1.png

我们为了更形象的说明,打个比方,比如电脑的系统有32和64位区分,32位的系统最大支持的是4G内存,这是因为32位的系统内存总线的长度为32,也就是可以分配给内存作为地址的数字是2的32次方个

五.内存修改器

修改内存,就像打游戏一样,你的血量为100,其实就是在内存中定义一个变量,比如int blood = 100,这个blood在内存中开辟一个空间,赋值为100,然后再进行其他操作,我们写个小例子

#include

#include

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的内存,达到内存修改器的效果

2bf0891ee229db20cba8a0744361eae2.png

然后我们就可以下载Cheat Engine,这个是内存修改器,和八门神器的原理差不多

2ab9a0b3f36812c814ca9e127550bc4d.png

下载地址自己去网上找吧,具体的用法,大家可百度

78f6caabf29c1ca76d7c3fc6a81a430d.png

当我们把内存冻结了之后

843c43f6bc0c8c04536d07a2471f34f2.png

你就达到了修改游戏的效果了,永远不会到0,也就不会死了,这里也只是阐述一个原理哦!

似乎节奏越来越快了,下节我们学习下指针,这样就会对C有一个清晰的认识了,早点把这块学完,对自己也是有莫大的好处的!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值