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

Hello World

//引入头文件
//只有函数的声明,编译时会去找到函数的实现
#include <stdio.h>

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

带参数main函数

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

基本数据类型

//基本数据类型: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");
}

输入输出

#define _CRT_SECURE_NO_WARNINGS //宏定义
#include <stdio.h>

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

    system("pause");
}

指针

#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");
}
//变量名,对内存空间上的一段数据的抽象
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");
}
//指针的指针
void main() {
    int i = 100;
    //创建一个int类型的指针
    int *p = &i;
    //输出地址
    printf("i的地址:%#x\n", &i);
    printf("p的地址:%#x\n", &p);  //每个变量都有地址,当然包括指针变量

    system("pause");
}
/*
//形参值改变,实参值不变
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");
}

综合案例

#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)

#include <stdlib.h>
#include <stdio.h>

__declspec(dllexport) void go() {
    //修改time变量的值
    int *p = 0x2ff9d8;
    *p = 999999;
}
上一篇 Android Gradle 4.1以上依赖变化:compile->api和implementation
下一篇 Android NDK基础2:C_指针类型_空指针_多级指针_指针运算
目录
文章列表
1 npm及yarn设置和取消代理的方法
npm及yarn设置和取消代理的方法
2
Android集成微信APP支付注意事项
Android集成微信APP支付注意事项
3
SpringBoot在Redis中使用BloomFilter布隆过滤器机制
SpringBoot在Redis中使用BloomFilter布隆过滤器机制
4
React Native热更新原理概述
React Native热更新原理概述
5
MySQL JOIN连接的使用
MySQL JOIN连接的使用
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。