c语言
c 替换 编译 链接 硬编码
c 宏是替换 0x21 链接(所有dll 链接时期)
c 宏
\# define TRUE 1
\# define FALSE 0 //编译前替换
\# define MAX(A,B) ((A)>(B)?(A):(B))//不开辟堆栈
//宏与函数的区别:函数分配额外的堆栈空间,而宏只是替换
//为了避免出错,宏定义中给形参加上括号
//末尾不需要分号
//define 可以替换多行的代码,记得后面加\
#define MALLOC(n,type)\
((type*)malloc((n)*sizeof(type)))
define 定义宏
typedef 重命名一种数据类型
define NUMBER 6
程序中凡是写NUMBER的地方,编译器会自动替换成6
typedef int myint
重定义int类型为myint类型,程序里就可以用myint类型定义变量,效果等同于int类型,主要是方便理解代码中变量的意义,比如定义typedef int age,然后用age类型定义变量,很容易就可以看出这是指年龄,比用int更清楚
头文件:
\#include "stdafx.h"//.h声明,cpp里面函数
\#include "stdlib.h"
\#include "windows.h"
void Function(){
printf("Hello World!");
}
int main(int argc,char* argv[]){
Function();
system("pause");
return 0;
}
重复包含问题:
x.h
/#include z.h
y.h
/#include z.h
z.h
struct Student{
int level;
}
//解决方案:
/#if !defined(zzz)
#define ZZZ
struct Student{
int level;
}
#endif
内存分配与释放
将记事本的.exe文件读取到内存,并返回读取后在内存中的地址。
不知道exe文件多大。需要动态申请内存。
malloc
int main(int argc, char* argv[]){
int* ptr;
//在堆中申请内存,分配128个int
ptr = (int *)malloc(sizeof(int)*128);
//无论申请的空间大小 一定进行校验 判断是否申请成功
if(ptr==NULL){
return 0;
}
//初始化分配的空间
memset(ptr,0,sizeof(int)*128)
//使用。。。
*(ptr)=1;
//使用完毕 释放申请的堆空间
free(ptr);
//将指针设置为null
ptr=null;
return 0;
}
void * 任何类型的指针
void* malloc(size_t) //需要释放
32位机器每一个exe都有一个4g的虚拟空间
代码区
数据区:
栈区
全局区
常量区
堆:动态内存在堆中分配 。现用现分。
文件读写:
1、fopen函数
2、fseek函数
3、ftell函数
4、fclose函数