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;
}

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/02/25/android-ndk-basic-c-basic-data-type-input-output-pointer/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Android NDK基础1:C_基本数据类型_输入输出_指针
Hello World //引入头文件 //只有函数的声明,编译时会去找到函数的实现 #include <stdio.h> void main() { printf("hello world\n"); ……
<<上一篇
下一篇>>
文章目录
关闭
目 录