//引入头文件
//头文件只有函数声明,编译时会找到函数的实现 c中库文件不能有重名函数 c++可以 因为c++中有函数声明
#define _CRT_SECURE_NO_WARNINGS //禁用不安全警告 宏定义 输入函数时有不安全警告
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
/*
void main(){
printf("hello world\n");
system("pause");
}
*/
//1.基本数据类型 及占位符
//int short %d
//long ld
//float %f
//double %lf
//char %c
//%x 十六进制 %o 八进制 %s 字符串
/*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;
int n = 0;
for (; n < 10; n++){
printf("%d\n",n);
}
system("pause");
}*/
//2.输入输出函数
/*void main(){
int i=0;
printf("请输入一个整数:");
scanf("%d", &i); //不安全的 要加上宏定义去除警告 否则会报错 //控制台输入 ,&取地址符
printf("i的值为:%d\n", i);
system("pause");
}*/
//3指针
//指针存储的是变量的内存地址
/*void main(){
int i = 99;
//指针变量
int* p = &i; //p的值就是i这个变量的内存地址
printf("%#x\n", p);
system("pause");
}
*/
//4.变量名,对内存空间上的一段数据的抽象
/*
void change_1(int j){
j = 300;
}
void change_2(int* p){
*p = 300;
}
void main(){
int i = 90;
//i = 89 ;
printf("i的值为%d\n", i); // 90
int *p = &i;
//间接赋值 指针的一个重要的特性
*p = 200;
printf("通过指针更改i的值为%d\n", i); //200
printf("i的地址:%#x\n", &i);
printf("p的地址:%#x\n", &p); //p的值:是i的地址所在内存的地址值 p的地址:是自身所处内存的地址 p地址存储的是i的地址值 i地址存储的是i的变量值
change_1(i);
printf("形参改变后i的值%d\n", i); // 200
change_2(p); //或者用 change_2(&i);
printf("指针改变i的值%d\n", i); //300
system("pause");
}
*/
//DEMO 外挂
void main(){
int time = 600;
while (time >0 ){
time--;
printf("游戏时间剩余%d秒\n", time);
printf("time内存地址%#x秒\n", &time);
//休息
Sleep(1000);
}
system("pause");
}
//生成dll文件注入
void went(){
int *p = 0;
*p = 9999;
}
//头文件只有函数声明,编译时会找到函数的实现 c中库文件不能有重名函数 c++可以 因为c++中有函数声明
#define _CRT_SECURE_NO_WARNINGS //禁用不安全警告 宏定义 输入函数时有不安全警告
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
/*
void main(){
printf("hello world\n");
system("pause");
}
*/
//1.基本数据类型 及占位符
//int short %d
//long ld
//float %f
//double %lf
//char %c
//%x 十六进制 %o 八进制 %s 字符串
/*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;
int n = 0;
for (; n < 10; n++){
printf("%d\n",n);
}
system("pause");
}*/
//2.输入输出函数
/*void main(){
int i=0;
printf("请输入一个整数:");
scanf("%d", &i); //不安全的 要加上宏定义去除警告 否则会报错 //控制台输入 ,&取地址符
printf("i的值为:%d\n", i);
system("pause");
}*/
//3指针
//指针存储的是变量的内存地址
/*void main(){
int i = 99;
//指针变量
int* p = &i; //p的值就是i这个变量的内存地址
printf("%#x\n", p);
system("pause");
}
*/
//4.变量名,对内存空间上的一段数据的抽象
/*
void change_1(int j){
j = 300;
}
void change_2(int* p){
*p = 300;
}
void main(){
int i = 90;
//i = 89 ;
printf("i的值为%d\n", i); // 90
int *p = &i;
//间接赋值 指针的一个重要的特性
*p = 200;
printf("通过指针更改i的值为%d\n", i); //200
printf("i的地址:%#x\n", &i);
printf("p的地址:%#x\n", &p); //p的值:是i的地址所在内存的地址值 p的地址:是自身所处内存的地址 p地址存储的是i的地址值 i地址存储的是i的变量值
change_1(i);
printf("形参改变后i的值%d\n", i); // 200
change_2(p); //或者用 change_2(&i);
printf("指针改变i的值%d\n", i); //300
system("pause");
}
*/
//DEMO 外挂
void main(){
int time = 600;
while (time >0 ){
time--;
printf("游戏时间剩余%d秒\n", time);
printf("time内存地址%#x秒\n", &time);
//休息
Sleep(1000);
}
system("pause");
}
//生成dll文件注入
void went(){
int *p = 0;
*p = 9999;
}