Android NDK基础1:C_基本数据类型_输入输出_指针

Hello World

1
2
3
4
5
6
7
8
9
//引入头文件
//只有函数的声明,编译时会去找到函数的实现
#include <stdio.h>

void main() {
printf("hello world\n");
//system("mspaint");
system("pause");
}

带参数main函数

1
2
3
4
int main(int argc, char* argv) {
printf("hello world\n");
return 0;
}

基本数据类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//基本数据类型:int short long float double char

/*
int %d
short %d
long %ld
float %f
double %lf
char %c
%x 十六进制
%o 八进制
%s 字符串
*/

#include <stdio.h>

void main() {
int i = 1;
printf("%d\n", i);

float f = 23.3;
printf("%f\n", f);

//基本数据类型所占的字节数
printf("int占%d字节\n", sizeof(int));
printf("char占%d字节\n", sizeof(char));
printf("float占%d字节\n", sizeof(float));

//循环
int n = 0;
for (; n < 10; n++) {
printf("%d\n", n);
}

//只有在C99版本下可行
for (n = 0; n < 10; n++) {
printf("%d\n", n);
}

//等待输入
system("pause");
}

输入输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define _CRT_SECURE_NO_WARNINGS //宏定义
#include <stdio.h>

//输入输出函数
void main() {
int i;
printf("请输入一个整数:");
//赋值
scanf("%d", &i); //控制台输入,&取地址符
//打印
printf("i的值为:%d\n", i);

system("pause");
}

指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

//指针存储的是变量的内存地址
//内存地址,系统给数据分配的编号(门牌号)
//Visual Studio内存地址的值查看:菜单->调试->窗口->内存->内存1->输入地址值和指定查看列数->在数据区右键选择显示格式
void main() {
int i = 90;
//指针变量,创建一个int类型的指针
int* p = &i; //p的值就是i这个变量的内存地址
printf("%#x\n", p);

float f = 89.5f;
//创建一个float类型的指针
float *fp = &f;
//%X是以大写十六进制打印,并且a~f打印出来的是大写的A、B、C、D、E、F
//如果是%#X,则会在打印的十六进制结果前面加上0X
printf("%#x\n", fp);

system("pause");
}
1
2
3
4
5
6
7
8
9
10
11
//变量名,对内存空间上的一段数据的抽象
void main() {
int i = 100;
//创建一个int类型的指针
int *p = &i;
printf("i的地址:%#x\n", &i);
//对指针p存的地址指向的变量进行操作,间接赋值,相当于 i = 200;
*p = 200;
printf("i的地址:%#x\n", &i);
system("pause");
}
1
2
3
4
5
6
7
8
9
10
11
//指针的指针
void main() {
int i = 100;
//创建一个int类型的指针
int *p = &i;
//输出地址
printf("i的地址:%#x\n", &i);
printf("p的地址:%#x\n", &p); //每个变量都有地址,当然包括指针变量

system("pause");
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
//形参值改变,实参值不变
void change(int i) {
i = 200;
}
*/

//指针参数传递
void change(int* p) {
*p = 200;
}

//变量名,对内存空间上的一段数据的抽象
void main() {
int i = 100;
//创建一个int类型的指针
int *p = &i;

//change(p);
change(&i);
printf("i的值为:%d\n",i);

system("pause");
}

综合案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

void main() {
int time = 600;
printf("time:%#x\n", &time);
while (time > 0) {
time--;
printf("游戏时间剩余%d秒\n", time);
//睡眠
Sleep(1000);
}
system("pause");
}

外挂程序:使用DLL注入工具

生成DLL动态链接库:项目属性->配置属性->常规->项目默认值->配置类型:动态库(.dll)

1
2
3
4
5
6
7
8
#include <stdlib.h>
#include <stdio.h>

__declspec(dllexport) void go() {
//修改time变量的值
int *p = 0x2ff9d8;
*p = 999999;
}

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :