全国计算机等级考试二级教程--C语言程序设计(2018年版) 随手笔记(五)
2018-03-22 19:32
661 查看
声明:本篇文章只是个人知识盲区、知识弱点、重点部分的归纳总结,望各位大佬不喜勿喷。梳理顺序是按照书籍的实际顺序梳理,转载请注明出处。作者:sumjess目前内容:第十二、十三章总结1、C语言中的用户标识符的作用域和存储类:C语言之局部变量&全局变量&变量存储方式
全局变量与局部变量在内存中的区别详细解析
2、编译预处理: (1)在C语言中凡是以“#”开头的行,都称为“编译预处理”命令行; (2)C语言预处理命令有:#define、#undef、#include、#if、#else、#elif、#endif、#ifdef、#ifndef、#line、#pragma、#error等,每行末尾不得用“;”结尾; (3)宏替换:
一、 不带参数的宏定义:
①不带参数的宏定义命令行形式如下:
#define 宏名 替换文本
② 替换文本中可以包含已定义过的宏名,例如:
#define PI 3.14
#define ADDPI (PI+1)
③ 当宏定义在一行中写不下,需要在下一行继续时,只需在最后一个字符后紧接着加一个反斜线“\”。#define sumjess sumjes\//不可以有空格
stry //需要顶头写,不可以有空格 ④ 同一个宏定义不能重复定义,除非两个宏定义命令行完全一致。
⑤ 替换文本不能替换双引号中与宏名相同的字符串:
如果YES是已定义的宏名,则不能用与他相关的替换文本来替换printf(“YES”)中的YES。
⑥ 替换文本并不替换用户标识符中的成分:
例如,宏名YES,不会替换标识符YESSORNO中的YES。
⑦ 用作宏名的标识符通常用大写的字母表示,这并不是语法规定,只是一种习惯。
⑧ 在C程序中,宏定义的定义位置一般写在程序的开头。
二、带参数的宏定义:
① 带参数的宏定义:
#define 宏名(形参表) 替换文本 #define MU(X,Y) ((X)*(Y))
② 同一个宏定义不能重复定义,除非两个宏定义命令行完全一致。
③ 在调用带参数的宏名时,一对圆括号必不可少。
④ 宏替换都是在编译前由预处理程序完成的,因此宏替换不占运行时间。
⑤ 宏替换中,实参不能替换括在双引号中的形参。
4、中止宏定义:
#define PI 3.14
main()
{
....
#undef PI
....
/*以上PI的作用域从#define PI 3.14命令行开始,到#undef命令行结束。从#undef以后PI变成无定义,不再代表3.14了*/5、文件包含:
#include "文件名" 或 #include <文件名> 注意: ① 在预编译时,预编译程序将用指定文件中的内容来替换此命令行。如果文件名用双引号括起来, 系统先在源程序所在的目录内查找指定的包含文件,如果找不到,再按照系统指定的标准方式到 有关目录中去寻找; ② 如果文件名用尖括号括起来,系统将直接按照系统指定的标准方式到有关目录中去寻找;
③ 在包含文件中还可以包含其他文件;6、动态存储分配:
(1)malloc函数:
pi=(int *)malloc(sizeof(int)) ; pf=(float *)malloc(sizeof(float)) ;
sizeof用来计算数据类型所占字节数,如果成功分配,该函数返回一个指向存储区首地址的基类型为 void的地址。若分配失败,函数返回空(NULL).
注:C标准规定malloc函数返回值的类型为void *,函数的调用形式为:malloc(size),要求size的类型为unsigned int。
(2)free:
free(p) (3)calloc函数:
calloc(n,size);
要求n和size的类型都为unsigned int;
ps=(char*)calloc(10,sizeof(char)) sizeof用来计算数据类型所占字节数,如果成功分配,该函数返回一个指向存储区首地址的基类型为 void的地址。若分配失败,函数返回空(NULL).
注:C标准规定calloc函数返回值的类型为void *,n和size要求类型为unsigned int。
全局变量与局部变量在内存中的区别详细解析
2、编译预处理: (1)在C语言中凡是以“#”开头的行,都称为“编译预处理”命令行; (2)C语言预处理命令有:#define、#undef、#include、#if、#else、#elif、#endif、#ifdef、#ifndef、#line、#pragma、#error等,每行末尾不得用“;”结尾; (3)宏替换:
一、 不带参数的宏定义:
①不带参数的宏定义命令行形式如下:
#define 宏名 替换文本
② 替换文本中可以包含已定义过的宏名,例如:
#define PI 3.14
#define ADDPI (PI+1)
③ 当宏定义在一行中写不下,需要在下一行继续时,只需在最后一个字符后紧接着加一个反斜线“\”。#define sumjess sumjes\//不可以有空格
stry //需要顶头写,不可以有空格 ④ 同一个宏定义不能重复定义,除非两个宏定义命令行完全一致。
⑤ 替换文本不能替换双引号中与宏名相同的字符串:
如果YES是已定义的宏名,则不能用与他相关的替换文本来替换printf(“YES”)中的YES。
⑥ 替换文本并不替换用户标识符中的成分:
例如,宏名YES,不会替换标识符YESSORNO中的YES。
⑦ 用作宏名的标识符通常用大写的字母表示,这并不是语法规定,只是一种习惯。
⑧ 在C程序中,宏定义的定义位置一般写在程序的开头。
二、带参数的宏定义:
① 带参数的宏定义:
#define 宏名(形参表) 替换文本 #define MU(X,Y) ((X)*(Y))
② 同一个宏定义不能重复定义,除非两个宏定义命令行完全一致。
③ 在调用带参数的宏名时,一对圆括号必不可少。
④ 宏替换都是在编译前由预处理程序完成的,因此宏替换不占运行时间。
⑤ 宏替换中,实参不能替换括在双引号中的形参。
4、中止宏定义:
#define PI 3.14
main()
{
....
#undef PI
....
/*以上PI的作用域从#define PI 3.14命令行开始,到#undef命令行结束。从#undef以后PI变成无定义,不再代表3.14了*/5、文件包含:
#include "文件名" 或 #include <文件名> 注意: ① 在预编译时,预编译程序将用指定文件中的内容来替换此命令行。如果文件名用双引号括起来, 系统先在源程序所在的目录内查找指定的包含文件,如果找不到,再按照系统指定的标准方式到 有关目录中去寻找; ② 如果文件名用尖括号括起来,系统将直接按照系统指定的标准方式到有关目录中去寻找;
③ 在包含文件中还可以包含其他文件;6、动态存储分配:
(1)malloc函数:
pi=(int *)malloc(sizeof(int)) ; pf=(float *)malloc(sizeof(float)) ;
sizeof用来计算数据类型所占字节数,如果成功分配,该函数返回一个指向存储区首地址的基类型为 void的地址。若分配失败,函数返回空(NULL).
注:C标准规定malloc函数返回值的类型为void *,函数的调用形式为:malloc(size),要求size的类型为unsigned int。
(2)free:
free(p) (3)calloc函数:
calloc(n,size);
要求n和size的类型都为unsigned int;
ps=(char*)calloc(10,sizeof(char)) sizeof用来计算数据类型所占字节数,如果成功分配,该函数返回一个指向存储区首地址的基类型为 void的地址。若分配失败,函数返回空(NULL).
注:C标准规定calloc函数返回值的类型为void *,n和size要求类型为unsigned int。
相关文章推荐
- 全国计算机等级考试二级教程--C语言程序设计(2018年版) 随手笔记(三)
- 全国计算机等级考试二级教程--C语言程序设计(2018年版) 随手笔记(四)
- 全国计算机等级考试二级(C语言程序设计)
- 2006年4月全国计算机等级考试二级笔试试卷C语言程序设计
- 全国计算机等级考试网络技术(三级教程)学习笔记
- 全国计算机等级考试网络技术(三级教程)学习笔记2
- 全国计算机等级考试网络技术(三级教程)学习笔记3
- 全国计算机等级考试二级C++改错题型总结
- 2006年4月全国计算机等级考试二级Java语言程序设计
- 2005年4月全国计算机等级考试二级笔试试卷
- 2005年4月全国计算机等级考试二级JAVA笔试试题及答案
- 全国计算机等级考试二级Visual Basic考试大纲
- 全国计算机等级考试二级Java笔试题知识点
- 2007年9全国计算机等级考试二级笔试试卷C++语言程序设计答案及解析
- 全国计算机等级考试二级Java笔试基础答案
- 2007年4月全国计算机等级考试二级笔试试卷
- 2009年3月全国计算机等级考试二级Java笔试试题及答案
- 全国计算机等级考试科目中加入“二级Python”
- 2008年4月全国计算机等级考试二级JAVA笔试真题试卷及答案
- 2004年9月全国计算机等级考试二级笔试试卷参考答案及解析