小甲鱼学完的c语言笔记
目录
(ctrl 加鼠标点击)
1、翻译查阅
2、辅助网上写法
3、命令
4、头文件
5、printf格式字符
6、整型数据字节范围表
7、命令格式
8、循环结构
9、数组10、自定义函数
11、关键字解释12、指针
13、预处理14、结构体
15、辅助框架16、共用体
&& 与如果两个的返回值都是真,那么这个的返回值才为真|| 或如果两个的返回值都是真,那么这个的返回值才为真!非
printf("%d %s %c %c %d \n")
相当于:
printf("%-5d%-5s%-4c%-8c%-8s\n")
(数字代表空格数)
15、辅助框架:
#include
#include
#define lpBaseAddress 0x486150//地址常量
void main()
{
while(1)
{
char x;
HANDLE hProcess;//句柄
DWORD lpBuffer;//写入的值
DWORD res;//写内存的返回值,判断是否成功
DWORD pid;//PID
HWND hWnd;//窗口句柄
printf("E键退出\nR键修改\n");
x=getchar();
if(x=='e'||x=='E')
{
break;
}
else
{
hWnd=FindWindow(NULL,"444");
printf("hWnd:%d\n",hWnd);
GetWindowThreadProcessId(hWnd,&pid);
printf("PID:%d\n",pid);
hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pid);
printf("hProcess:%d\n",hProcess);
printf("修改多少?\n");
scanf("%ld",&lpBuffer);
lpBuffer=lpBuffer-10;
res=WriteProcessMemory(hProcess,lpBaseAddress,&lpBuffer,4,0);
(res==0)?printf("失败\n"):printf("成功\n");
}
}
}
/*************************************************** WriteProcessMemory(
HANDLE hProcess,
LPVOID lpBaseAddress,
LPVOID lpBuffer,
DWORD nSize,
LPDWORD lpNumberOfBytesWritten
return res
);
/**************************************************
***************************************************
FindWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName
);
*************************************************** GetWindowThreadProcessId(
HWND hWnd,
LPDWORD lpdwProcessId
);
***************************************************
OpenProcess(
DWORD fdwAccess,
BOOL fInherit,
DWORD IDProcess
);
***************************************************
***************************************************/
取句柄:
hProcess=Findwindow(NULL,//窗口名称)
取PID:
HWND hWnd;
DWORD Pid;
GetWindowThreadProcessId(hWnd,&Pid);
读内存:
Readprocessmemory
hProcess [in]远程进程句柄。被读取者//取句柄
pvAddressRemote [in]远程进程中内存地址。从具体何处读取//基址加偏移pvBufferLocal [out]本地进程中内存地址. 函数将读取的内容写入此处//变量dwSize [in]要传送的字节的长度
pdwNumBytesRead [out]实际传送的字节数.//变量
读到的=Readprocessmemory(hProcess,0xFFFFFFFF,缓冲区,4,0)
写内存:
WriteProcessMemory
hProcess int 进程句柄
lpBaseAddress int 内存地址
lpBuffer int 指向要写的数据的指针
nSize int 要写入的字节数
WriteProcessMemory(hProcess,0xFFFFFFFF,缓冲区(写入的值),4,0)关闭句柄:
CloseHandle(hProcess)
1、信息框:
#include
MessageBox(0,"hh"//内容,"hh"//标题,MB_OK//确定键)
api:
.DLL命令API_MessageBox, 整数型, "user32", "MessageBoxA", 建立消息框窗体.参数1, 整数型,0 ,
.参数2, 文本型, “内容”,
.参数3, 文本型, “标题”,
.参数4, 整数型, MB_OK//即确定键,
2、辅助网上写法:
点击查看!(ctrl加鼠标点击)
3、命令
While 循环命令
while()循环括号里只有2种值,0和非0,0表示假,非0表示真(即1)。真就进入循环,假就离开循环。这里1就表示永真,直到循环体内遇到break。
a=0
While(1)//表示真
{
a=a+1;
If (a=4)//假如
{
break;//跳出循环
}
}
&& 与如果两个的返回值都是真,那么这个的返回值才为真
|| 或如果两个的返回值都是真,那么这个的返回值才为真
!非
If的三种形式:
第一种形式为:
if(a>b)//如果真(返回值)
{
a=a+1;
b=b+1;
}
A=a+2;
B=b+2;
/*************************************************************************************************
如果返回值为真,那么a=a+1;b=b+1;A=a+2;B=b+2。,否则跳过,直接执行A=a+2;B=b+2。相当于如果真()
****************************************************************************************************/
第二种形式为:
If(a>b)//如果(返回值)
{
A=a+1;
B=b+1;
}
Else //那么;否则
{
A=a+2;
B=b+2;
}
/********************************************************************************************** 如果a>b,那么A=a+1;B=b+1; 否则A=a+2;B=b+2;相当于如果()
****************************************************************************************************/ 第三种为:
c语言代码易语言代码流程图
/***********************************************************************************************
相当于得到某数值之后,然后寻找匹配的项目
***********************************************************************************************/
------------------------------------------------------------------------------------------------------------
注意:if(a==1)中“==”为等号,若写成“=”则为赋值,返回值无论如何都是1。应写为“==”要避免,最好写为1==a,这样写如果写错编译会报错。
Scanf()
用scanf("%d,%d",&a,&b);的时候。输入的时候输入两个数,中间还要用逗号隔开的,否则会出错。用scanf("%d%d",&a,&b);的时候,输入两个数的时候,不用输入逗号。可以用空格隔开。相当于监视热键()中的得到热键代码。注意:&不能丢。
scanf意思是从键盘输入数据,从键盘得到字符,放到某个变量里,当然要它的地址了;printf 意思是输入某个变量的内容,只要知道变量名就行了。
#include
#include
void main()
{
char a,b;
scanf("%c,%c",&a,&b);
printf("%c,%c\n",a,b);
}
Scanf可以得到整形,如:
int a;
scanf("%d",&a);
//输入2015
a==2015;
X=Getchar()取得字符,赋值给x,即把键盘上打的键的代码给x(之前要char x)若按下a键,那么x中的键码为‘a’
#include
#include
void main()
{
char a,b;
a=getchar();
b='z';
printf("%c,%c\n",a,b);
}
自增自减符:
自增自减符的两种形式平时一样,但在判断真假时用法不同,并且在运算时也不同,如下图:
Putchar 输出单个字符
If{}else{}可以写成条件表达式:
If (a>b){max=1;}else{max=2;} 等于max=(a>b)?1:2;
switch语句
#include
void main()
{
int a;
printf("input integer numbers: "); //打印
scanf("%d",&a); //相当于监视热键()
switch(a) //相当于标签响应事件的参数一的判断{ //各个分支,若输入1则执行分支1,case case 1:printf("周1\n");break; 后只能为整型,可以跟表达式,但结果为整形case 2:printf("周2\n");break; //break跳出循环
case 3:printf("周3\n");break;
case 4:printf("周4\n");break;
case 5:printf("周5\n");break;
case 6:printf("周6\n");break;
case 7:printf("周7\n");break;
default:printf("error\n");
}
}break 跳出循环
8、循环结构
<1>goto语句
#include
void main()
{
int a;
a=1;
xx:if (a<50)
{
a=a*2+10;
printf("%d\n",a);
goto xx;
}
printf("%d\n",a);
}
其中,xx为标识符。
<2>while语句
#include
void main()
{
int a=1,b=0;
while(a<=100)
{
b=a+b;
a++;
}
printf("%d\n",b);
}
<3>、do——while语句:
与while完全相同,就是先把代码完成,在判断。Do{}while();
#include
void main()
{
int a=1,b=0;
do
{
b=a+b;
a++;
}
while(a<=100);
printf("%d\n",b);
}
For语句:
for(变量最初的值;循环条件;变量递增或改变)
{
代码;
}
如:
#include
void main()
{
int a,b;
for (a=1,b=0;a<=100;a++)
{
b=b+a;
}
printf("%d\n",b);
}//求1加到100,最后输出5050.
其中,参数1可以省略,但要在之前赋值。
其中,参数2不能省略。
其中,参数3可以省略,但要在循环中写出。
int a=1,b=0;
for (/*参数1*/;a<=100;/*参数3*/)
{
b=b+a;
a++;
}
For循环的嵌套:
#include
void main()
{
int a,b;
for (a=1;a<7;a++)
{
printf("\n");
for(b=1;b<=a;b++)
{
putchar('*');
}
}
printf("\n");
}
Break与continue的区别
Break直接跳出整个循环(1个),continue本次循环continue后的代码,但仍然循环。
Getch ①相当于停止,按随意键后继续头文件
②字符输入函数,得到字符后传给一个变量。如:a=getch(),可能
与getchar()相同。
9、数组
定义数组:int a[10]; //定义一个数组a,有10个元素。
Int a[5],b,c,d[6]; //可以同时定义多个同类型的数组。
数组是从0下标开始,如int a[3];则元素为a[0]、a[1]、a[2]
数组的赋值:
①初始化全部赋值:int a[3]={5,9,7};//在定义的时候赋值
②初始化部分赋值:int a[3]={5,9};//那么a[0]=5; a[1]=9; a[2]=0;(即未赋值)
③单个赋值:int a[3]; a[0]=5; a[1]=9; a[2]=7;
二位数组:
动态数组:
10、自定义函数
<1>无参数函数
#include
{
void printstar(); //定义一个名为printstar的函数
printstar(); //定义完成后使用该函数
}
void printstar() /*************************************
{ 定义该函数为:
printf("**********\n"); 打印“************”加回车
} *************************************/
Void 无返回值
Int 返回整形
Char 返回字符
。。。。。。
<2>有参数函数
#include
void main()
{
Int max(int x,int y)//定义一个名为max的函数,返回值为整形max(); //定义完成后使用该函数
}
Int max(int x,int y)/*************************************
{
Int z;
scanf(“%d,%d”,x,y)
Z=x+y; 定义该函数
Return z;
Printf(“%d”,z);
} *************************************/
#include
void main()
{
int max(int x,int y); //定义一个求和的函数
scanf("%d%d",&a,&b);
c=max(a,b);
printf("%d",c);
}
int max(int x,int y)
{
int z;
z=x+y;
return z;
}
11、关键字解释
auto :声明自动变量
break:跳出当前循环
case:开关语句分支
char :声明字符型变量或函数返回值类型
const :声明只读变量
continue:结束当前循环,开始下一轮循环
default:开关语句中的“其它”分支
do :循环语句的循环体
double :声明双精度浮点型变量或函数返回值类型
else :条件语句否定分支(与if 连用)
enum :声明枚举类型
extern:声明变量或函数是在其它文件或本文件的其他位置定义float:声明浮点型变量或函数返回值类型
for:一种循环语句
goto:无条件跳转语句
if:条件语句
int:声明整型变量或函数
long :声明长整型变量或函数返回值类型
register:声明寄存器变量
return :子程序返回语句(可以带参数,也可不带参数)short :声明短整型变量或函数
signed:声明有符号类型变量或函数
sizeof:计算数据类型或变量长度(即所占字节数)
static :声明静态变量
struct:声明结构体类型
switch :用于开关语句
typedef:用以给数据类型取别名
unsigned:声明无符号类型变量或函数
union:声明共用体类型
void :声明函数无返回值或无参数,声明无类型指针
volatile:说明变量在程序执行中可被隐含地改变
while :循环语句的循环条件
12、指针(地址)
Int *a;//定义一个指针变量a(整形)
#include
void main()
{
int a,b;
int *pa,*pb;
a=100;
b=55;
pa=&a;
pb=&b;
printf("%d %d\n",pa,pb); }
*和&不能丢。