C语言
swo_ows
博主只是个小菜鸡,欢迎各路大佬指教
展开
-
预处理
预定义符号_FILE_:进行编译的源文件 _LINE_:文件当前的行号 _DATE_:文件被编译的日期 _TIME_:文件被编译的时间 _STDC_:如果编译器遵循ANSI C,其值为1,否则未定义宏定义#define:宏定义 #undef:移除宏定义宏替换调用宏时,检查参数知否包含#define定义的符号,如果是,首先替换,字符串常量的内容不被检查 随后替换后的文本插...原创 2019-03-10 09:23:25 · 99 阅读 · 0 评论 -
数据在内存中的存储
整形在内存中的存储整形数据在内存中存放的是补码 在计算机系统中,数值一律用补码来表示和存储为何使用补码使用补码,可以将符号位和数值域统一处理 加法和减法可以统一处理 补码与原码的相互转换,其运算过程是相同的,不需要额外的硬件电路大小端大端:数据存高位储在低地址中,低位存储在高地址中 小端:数据高位存储在高地址中,低位存储在低地址中为何有大小端在计算机系统中以字节为单位...原创 2019-03-10 09:23:36 · 255 阅读 · 0 评论 -
程序环境
程序环境翻译环境:用于这个环境中源代码被转换为可执行的机器指令 执行环境:用于实际执行的代码翻译环境组成程序的每个源文件通过编译分别转换为目标代码 每个目标文件由链接器捆绑在一起,形成一个单一而完整的可执行程序 连接器同时会引入标准库和个人的程序库中的函数编译预处理:删除注释,宏替换,头文件展开,条件编译 编译:词法分析,语法分析,语义分析,符号汇总,生成汇编代码 汇编:...原创 2019-03-10 09:23:47 · 188 阅读 · 0 评论 -
输入输出函数
相关函数perror void perror (const char* str); 以一种简单统一的方式报告错误,如果perror参数str不是NULL,并指向一个字符串,perror函数先打印这个字符串,然后跟着输出一个分号赫尔一个空格,接着输出错误信息exitvoid exit (int status); 参数status返回给操作系统,用于提示程序是否正常完成,符号EXIT_...原创 2019-03-09 18:03:20 · 365 阅读 · 0 评论 -
动态内存管理
动态内存函数mallocvoid* malloc (size_t size); 申请一块size大小的虚拟内存,如果开辟成功,则返回开辟好空间的指针,如果开辟失败,则返回NULL指针,对返回值类型需做强制转换,如果参数size为0,malloc的行为标准是未定义的,取决于编译器freevoid free (void* ptr); 释放动态开辟的内存,但不会把指针置NULL,如果p...原创 2019-03-09 18:01:45 · 176 阅读 · 0 评论 -
字符函数和字符串函数
字符函数字符分类函数字符串函数strlensize_t strlen (const char *str); 返回字符串的长度,'\0'结束,不包括'\0'strcpychar* strcpy (char* detination, const cahr* source); 拷贝字符串,源字符串以'\0'结束,而且'\0'也拷贝,拷贝失败返回detinationstrc...原创 2019-03-09 18:01:06 · 136 阅读 · 0 评论 -
数组和指针
数组数组名存放首元素地址 &数组名和sizeof(数组名)表示整个数组 char arr[] = "abc"; sizeof(arr) = 4; 内存中存放的是'a','b','c','\0';char arr[] = {'a', 'b', 'c'};szieof(arr) = 3;内存中存放的是'a','b','c';char *p = "abc";内存中存放的是"abc"指针...原创 2019-03-09 17:59:08 · 104 阅读 · 0 评论 -
函数
函数的分类库函数:IO函数、字符串操作函数、字符操作函数、内存操作函数、时间/日期函数、数学函数、其他函数 自定义函数函数组成函数名、返回值类型、函数参数函数的参数实际参数(实参) 形式参数(形参),形参实例化是对实参的一份临时拷贝main函数参数int main (int argc, char* argv[], vhar* envp[]){} argc:整型变量,表...原创 2019-03-09 17:57:13 · 114 阅读 · 0 评论 -
操作符
算术操作符+:加-:减*:乘/:除%:取余移位操作符<<:左移操作符,左边抛弃,右边补零>>:右移操作符;逻辑移位(左边补零,右边抛弃)算术移位(左边用原有符号补充,右边抛弃)注:不移动负数位位操作符&:与|:或^:异或赋值操作符x = y:y值赋给xx += y:x = x + yx -= y:x...原创 2019-03-09 17:54:44 · 78 阅读 · 0 评论 -
语句结构
分支语句结构if语句if(条件判断){...}else if(条件判断){...}.else if(条件判断){...}else{...}switch语句switch(变量){ case 值:{...} break; ... case 值:{...} break; default:{...} ...原创 2019-03-09 17:54:04 · 155 阅读 · 0 评论 -
常量-变量
常量常量的分类字面常量 const定义的常量 #define定义的标识符常量 枚举常量变量命名规则必须以字母或下划线开头,后跟字母、数字、下划线 不能用关键字用作标识符关键字数据类型基本数据类型:void char int float double 类型修饰:short long signed unsigned 自定义类型: struct union enu...原创 2019-03-09 17:51:00 · 83 阅读 · 0 评论 -
自定义类型
结构体(struct)结构体是一些值的集合,这些值称为成员变量,结构体没个成员可以是不同的类型结构体内存对齐规则第一个成员变量在与结构体变量偏移量为0的地址处 其他成员变量要对到对齐数的整数倍处,对齐数=编译器默认对齐数与该成员大小的较小值,vs中默认对齐数为8,linux默认对齐数为4 结构体大小为最大对齐数的整数倍 如果嵌套了结构体,嵌套结构体对齐到自己的最大对齐数的整数倍处...原创 2019-03-09 17:43:48 · 76 阅读 · 0 评论 -
C基础
函数入口:mainint main(){ return 0;}注释C:/*注释内容*/ C++://注释内容字符串由双引号引起来的一串字符:"hello!\n"转义字符数据类型void //无类型char //字符型 1short //短整型 2int //整型 4long //长整型 4float //单精度...原创 2019-03-09 17:46:21 · 125 阅读 · 0 评论 -
函数栈帧
概念函数调用的过程中计算器需要为函数开辟空间,用于本次函数的调用中临时变量的保存、现场保护,这块栈空间称为函数栈帧。 栈帧维护需要esp和ebp这两个寄存器,分别存放了这个栈的栈底指针和栈顶指针。调用过程 创建栈帧并初始化 创建局部变量,push参数(从右向左顺序依次压入) push下条指令的地址 再次创建栈帧,取参数计算,将返回值放入寄存器返回 销毁栈帧,pop寄存器...原创 2019-03-10 09:23:10 · 105 阅读 · 0 评论