1.关于if
if/if else /else
判断语句中最常见的不赘述
2.头文件cctype中常用函数
略
3.?运算符
a >b ? 10 : 12 ; // 若为true则返回10,反之则返回12
int c = a>b? 10 : 12 ;
链接:https://pan.baidu.com/s/1FJDcWac1vIVNxhF9buM_rg
提取码:zp2e
4.switch case()详解
关于switch case 接受的参数(变量)
只接受整形常量或者char类型值!
char a ;
cin>>a ;
switch (a)
{
case 97 : //互相转换
cout<<"good sth !"<<endl;
break ;
case 98 : //同上
cout<<"bad thing !"<<endl;
break ;
}
格式大概如上,用到了ascll编码
中文输入法状态下输入会出现错误
5.枚举量作为switch case 语句中变量是要检查枚举数是否为整形
6.清除输入错误
while (!cin>>a[i])
{
// cin.clear(); //第一种方法——清除行
while(cin.get()!='\n')
continue; //17章会有,目的是清楚当前输入到换行符结束
}
7.char 数组接受int值
char ab[10] ;
cin.get(ab,10);
for(auto X:ab )
cout<<X;
输入3422341
输出3422341
只能接受单数字且不能有空格
8.文件的I/O
头文件17章会提到
9.函数初探
函数模板
void A(void){};
第一个为返回类型,第二个类型为参数类型
int a [] ; //不给参数的数组__没意义
int a [] {....} //一般这样c++11 初始化列表法
10.数组优化
使用指针来定位往往更效率
11.有关const赋值
11.1 const 指针可以赋给const变量,非const变量
11.2非const指针不可以赋给const变量
以上指针皆为解引用之后赋值的
11.3 非const指针不可以赋给const指针
这里指指针关系
char blue = 'a' ;
char*pr =&blue ;
const char* pt ;
const char**pk ;
pt = pr ; //成功把blue的地址赋给const 类型的pt
pk = pr ; //双层间接关系 ,编译失败
11.4const 指针永远不能赋给非const指针
char blue = 'a' ;
char*pr =&blue ;
const char* pt ;
pt = pr ;//合法,非const给const
char*po ;
po = pt ; //编译失败
const char**pk = *pt ; //编译失败,不能这么赋值留个疑问
po = pk ;//报错
11.5const 的位置 :只谈定义变量时
int b = 10;
int c = 11;
const int* a = &b ;
*a = 11 ; // 错误,向只读位置赋值
a=&c;//valid
const放到后面时
int b = 10;
int c = 11;
int* const a = &b ;
*a = 11 ; // valid
a=&c; //错误,向只读位置赋地址
没什么好总结的
12.用函数传递二位数组或者指针数组
两个模板:
double A(double*(arrs)[4],size) ;
double A(double arrs[4][4] ) ;
简单讲就是操作地址,甚至可以是函数指针
13.EOF判断放入while语句中会自动判断
14将结构体放入函数
因为结构相当于默认公有成员的类,所以结构体可以使用构造
函数调用结构体
void sum (Apt1 ,Apt2 )
调用的时候只要用->符号就好了
15.后置
string 容器 ·array 容器 · 递归
关于递归和容器我在链表里写的很详细,函数也能递归,差不多吧
16.函数指针
就简单说明一下不做深究,STL模块也有
定义:void A (int lines ,double(*pf)(int) ;
调用:A(num,pk) //pk为一个函数
说明:double指的是调用函数返回值,(*pf)取了即将调用函数的指针,(int) 指的是调用函数的参数类型
17.用auto进行自动类型推断
18.typedef进行形式化简
用法:typedef int A ; //后面语句复杂的时候可以用
19.内联与宏及其弊端
这里指的都是函数,当然也可以直接define a 10 ;来定义常量
define square (x) x*x // 定义了一个宏函数,独特的不同于函数的定义方法
//此宏函数存在的弊端(但不是所有都出错):
double a = square(4.5+7.5);
//输出是
a=4.5+7.5*4.5+7.5
//而不是
a=(4.5+7.5)^2
这可以进行改进:define square (x) ((x)*(x)) 必须加括号否则有歧义
//内联函数
inline double a (double) ; // 普通函数加个inline
另外,关于函数体内联和宏,代码块必须要简单,内联中不能使用switch case 语句 , 也不能使用for 循环, 内联的作用是把代码块放入调用函数中运行,为了加快运行效率,宏则相当于定义东西。
20.关于引用
int b = 10 ;
int &a = b; //引用b的值,这里的a相当于b,与b共地址
void a (int& , int&) ;//放入函数
a(b+10);//非法,不能给右值,但可以强制
@后面还讲到了右值引用,打破了限制
@可以引用结构
@函数也可以返回引用类型的值
@不能返回局部变量,但是可以返回局部变量的副本
@可以通过操作指针来把定义的变量返回前提是代码块结束之后内存没有被释放
注意!返回类型(函数名之前的东西)必须和return的类型相匹配
有点小疑问
string 和 char* 类型之间会自动转换
21.引用在I/O中的应用
详见18章的整理吧