1.引用类型占多大的空间
虽然使用sizeof查看出的引用的大小和所属类型大小一致但引用本身不占用内存空间只是别名而已
2.什么样的函数声明为内联函数(内置函数)
函数功能简单且没有复杂语句
代码函数少于5行
被多次调用的函数
在类内的函数默认为内敛函数
3.头文件中< >与 " "的区别
< >中的使用的头文件默认从函数库中的查找调用
" "中使用的一般为自定义的头文件(.h文件)
查找路径的区别 < >从系统配置的库函数路径下查找,不查找工程文件夹, " " 先从工程文件夹下查找头文件,查不到再到系统环境下查找
4.宏定义的使用
#define 宏名 替换文本
宏名的命名规范应遵守C语言命名规范,通常为大写字母,替换文本可以是任意常数、表达式、字符串,语句后不加 “ ;”号,否则会被识别,编译时报错
#include<iostream> #define PI 3.1415926 using namespace std; int r=2; double circ() { return 2*PI*r; } int main() { double c; c=circ(); cout<<c<<endl; }
宏定义用于变量的替换,方便程序的阅读、理解和代码重用性,更有利于程序的结构化设计
宏定义分为有参宏和无参宏
无参宏表示宏名后面不带参数,如上述示例中PI为不带参数的宏
有参宏表示宏名中带有参数,如下例所示:
#define A 3 //无参宏 #define TOP(A) A*A //有参宏
需要注意的是,宏的使用是进行简单得替换,与函数稍有不同,如想到得到正确的结果如进行改进
#define TOP(A) ((A)*(A))
5.内存处理分区:堆区 栈区 代码区
堆区(heap):生长方向为由下至上生长,即由低地址向高地址方向,由程序员进行分配和释放,使用malloc()函数进行动态内存分配,free()函数进行释放,否则发生内存泄漏,若不释放当程序结束时由操作系统回收
栈区(stack):生长方7向方向为由上至下,即由高地址向低地址方向,由编译器自动分配释放,用于存储临时的局部变量和const声明的局部变量,函数调用和返回时的入口参数和返回值,当函数结束时,栈上的内容也就结束了,栈采用先进后出的原则,速度快,自由性差,最大空间大
代码区:存放程序的代码
6.栈和队列的区别
栈(stack)又名堆栈,它是一种运算受限的线性表,限定仅在表尾进行插入和删除操作的线性表
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样队列也是一种操作受限制的线性表
栈的操作分为进栈和出栈,且均在栈顶进行,无法在栈底进行操作,遵循后进先出(LIFO)的原则,在头部取数据时需开辟临时空间以保证数据和遍历前的一致性
队列的操作分为入队和出队,从队尾入队队头出队,采用先进先出(FIFO)的原则,遍历时是基于地址指针的,从头或者尾进行遍历,不能同时遍历。因为遍历过程中不影响数据结构,所以不需要开辟空间,遍历速度快
7.string类型的使用
char* strcat(char *str1, const char*str2); //连接str2到str1的后面
char *strchr(const char *str, int ch); //查找字符ch在str中第一次出现的位置
int strcmp(const char *str1, const char *str2); //按字典方式比较字符串str1与字符串str2
char *strcpy(char *str1, const char *str2) //复制字符串str2到字符串str1中
size_t strlen(const char *str); //求字符串str的长度
(1)为字符串直接赋值 srting string1; string1="Chain";
(2)对字符串变量中某一字符进行操作 string string1="Chain" string1[2]="c";
(3)使用加号连接字符串 string string1="hello"; string string2="world"; string1=string1+string2
(4)使用关系运算符比较字符串 if(string1<string2)
(5)字符串的输入输出 cin>>string1; cout<<string2;