第六章 函数
学习要点
- 函数的声明,定义,调用
- 参数的传递
值传递、引用传递 变量的作用域
局部变量、静态变量(static)、外部变量(extern声明外部已经存在)、寄存器变量(register加快访问速度)内联函数(inline),解决频繁调用函数频繁调用开销问题
- 预处理器
-函数重载,具有相同函数名不同参数列表的函数
疑难解惑
const和#define的区别
宏定义只是单纯的字符替换,const是定义一个不能改变的常量,const要检查类型,所以更安全使用内联函数的注意点
1.在一个文件中定义的内联函数不能在其余文件中使用
2.内联函数应该简洁,不能有循环,if,switc语句,否则编译器还是会将其作为非内联函数处理
3.内联函数要在函数被调用之前声明,否则无效- C++中形参和实参的区别
形参只是函数声明时的参赛,只说明参数名和类型,不是实际参数,不能真正使用.实参是运行时传给函数的参数,是实际的变量
第七章 数组与字符串
学习要点
- string的三个构造函数
//字符串类测试
//string 的三个构造函数
//string str;
//string str("OK");
//string str(str1);
- 字符串的输入与输出
使用cin和cout输入输出,这里介绍另外两个函数
1.cin.getline 2.cin.get
//字符创的输入输出
char c[] = "China";
cout<<c<<endl;
//cin.getline(字符数组名St,字符个数N,结束符);读取但不存储结束符
//cin.get(字符数组名St,字符个数N,结束符);不读取也不存储结束符
char city[80],state[80];
for(int i=0;i<2;i++){
cin.getline(city,80,',');
cin.getline(state,80,'\n');
cout<<"City:"<<city<<"State:"<<state<<endl;
}
- 字符串处理常见函数
1.字符串拷贝strcpy(char ,char )
2.字符串连接char * strcat(char ,char )
3.字符串比较int strcmp(char ,char )
4.字符串长度int strlen(char *)
5.大写转小写strlwr(char *)
6小写转大写strupr(char *)
7.字符串截取str.substr(pos,length)//pos起长度为length
8.是否空串str.empty();
9.插入字符串str.insert(pos,str2);//pos起插入str2
10.删除字符串str.remove(pos,length)//pos起删除length长度
11.查找str.find(str1)//返回str1首次出现的位置
12.查找str.find(str1,pos)//返回pos起,str1首次出现的位置
13.字符串转换str.c_str()//将字符串转换成c风格的字符串
疑难解惑
使用数组时,如何清0数组
使用memset,如memset(str,0,sizeof(str));//全体置为0如何将int类型转换为字符串
使用itoa函数实现,char * itoa(int value,char *string,int radix);
第八章 指针
学习要点
- 指针的定义,存储另一个变量的地址的变量
- 指针本身所占有的内存,根据系统决定,一般是四个字节64位
- 为什么要用指针
1.处理堆中存放的大型数据
2.快速访问类的成员数据和函数
3.以别名的形式像函数传递参数 - 指针中常见的符号及概念
int n=5;
int *p;//指针声明
p=&n;//指针赋值
cout<<"取值"<<*p<<endl;
cout<<"取p的地址"<<&p<<endl;
cout<<"取p中存放的地址"<<p<<endl;
- 函数指针及指针函数
指针函数 函数的返回值是指针
函数指针 指向函数的指针
#include<iostream>
using namespace std;
int fun(int a){
return a;
}
int main(){
int (*fp)(int a);
fp=fun;
cout<<fun(5)<<endl;
cout<<fp(5)<<endl;
}
指针的算术运算
对指针进行加1操作,得到的是下一个元素的地址,而不是原有的地址加1指针数组和数组指针
指针数组,存放指针的数组
数组指针,指向数组的指针- void指针,void *可以指向任何类型的数据
- -多级指针
- 动态内存分配,C++中使用new 和delete
疑难解惑
- C++中动态内存分配应该注意什么问题
1.动态分配内存失败
2.指针的删除和堆内存释放.指针的删除即delete p.操作,该操作结束后释放p指针指向的堆内存,p指针为空
3.内存泄漏和重复释放。new返回的指针丢失,无法释放该内存,造成内存泄漏。new出来的内存多次delete造成重复释放。
4.动态分配的变量或对象的生命期。堆内存只能释放一次。