C++二级复习1
以下编辑于2019-03-24
1、字符串常量,系统会在末尾自动添加一个\0作为结束标志;字符数组,在末尾可以不添加\0,若添加,会改变数组的实际长度。
a={'a','b','c','d'}
strlen("abcd") > strlen(a)
2、求余数,需要两个皆是整型
3、float类型运算时,按照double处理
4、强制类型转换
(类型)(变量) 或 类型(变量)
5、逗号运算符
表达式1,表达式2,...,表达式n
依次求解每个表达式,整体的值为最后一个表达式的值
6、标准输入输出流的格式控制符,以后了解*(考试要考估计)
7、C++保留了C语言的 getchar() putchar() scanf() printf()
8、C+新的头文件
#include <cmath> 引入数学库
9、布尔变量
bool 类型 常量值只有 true 和 false
true 和非零值 均处理为1,false处理为0
10、逻辑变量
!(非)> &&(与)> ||(或)
11、条件运算符
表达式1 ? 表达式2 : 表达式3
先求解表达式1的值,为真,整个表达式的值等于表达式2的值,否则,等于表达式3的值
12、switch语句
switch()
{
case 1:语句break; 一般情况
case 2,3,4:语句 break; 多条件符合
default : 语句 break; 所有条件都不符合则执行
}
13、函数的嵌套调用是不被允许的,即在一个函数内,完整的包含另一个函数。
(python好像可以,高阶函数里的返回函数或者匿名函数)
14、内置函数
适用于,规模小调用次数频繁的函数
在 函数 声明和定义函数体的时候,在前面加上 inline 即可,可以提高程序运行的效率。
此外,会增加主函数的代码长度,以及对于 含有循环,递归结构,switch语句以及很长的代码,指定为inline后,系统并不会照样执行。
15、重载函数,函数名多用
利用 相同的一个函数名,修改函数的类型,参数的类型,个数,顺序(函数体)
已达到 “一名多用的目的”,简单的说,就是免得写函数体,只要简单改改类型和参数就行了。
16、函数模板,这个感觉还是挺有用的
建立一个通用函数,类型和参数类型不具体制定,用一个虚拟的类型进行替代。
定义在主函数之前
template<typename T> 或 template<class T>
T max(T a,T,b)
{
return (a>b)?a:b;
}
使用时,直接调用函数名即可
同样可以定义,多个类型参数
template <class T1,typename T2>
当然,这个模板只限于,对函数的参数个数,函数体相同,而类型不同的情况。
17、带有默认参数的函数
一般最好只在函数的声明里,指定默认值
一个函数不能同时做,重载函数和有默认参数的函数(少一个参数时会产生二义性)
以下编辑于2019-03-25
18、同一个源文件中,全局变量和局部变量同名,局部变量的作用范围内,全局变量将被屏蔽。
19、变量的属性–存储期
分为静态存储期和动态存储期,对应静态存储区(全局变量)和动态存储区(函数的形参,函数中定义的变量,函数调用时的现场保护和返回地址),
变量除了数据类型的属性外,还有存储类别,即数据在内存中的存储方法,即刚刚提及的两种,类别有4种,自动的(auto),静态的(static),寄存器的(register),外部的(extern)
自动变量,函数中的局部变量,不用static加以声明,编译系统对其动态分配存储空间。一般用auto作声明,可以省略。
静态局部变量(static)
局部变量的值在函数调用结束后,存储单元不释放,在下一次调用函数时,变量保留上一次调用结束时的值。
存储在静态存储区,整个程序运行期间都不释放,编译时赋初值,而后,每次调用时,重新赋值。
定义局部变量时,如果不赋初值,对静态局部变量来说,编译时,自动赋初值为0或者是空字符串,而对自动变量来说,测试一个不确定的值。(每次调用时,存储单元都释放了,下次需要重新分配存储单元)
缺点:多占内存,且降低可读性。
声明寄存器变量(register)
允许将只用频繁的变量放在CPU的寄存器中,无需再内存中读取,提高效率,一般编译系统会自动将合适的变量放在寄存器中。
声明外部变量(extern)
可以用extern对全局变量声明,扩展作用域
一般将全局变量的定义放在所有函数前,可以少声明一个extern,
两个文件中都使用了某个变量,可以在函数中声明一个外部变量,扩展作用域
声明静态外部变量(static)
本文件的全局变量前加上static,可以避免被其他文件误用,只作用于本文件的外部变量。
内部函数与外部函数
定义时,前面加上static,这样,该函数只限于被本文件中其他函数所调用。
函数首部加上extern/不加则默认为外部函数,可以在一个文件中调用其他文件中定义的函数,
使用函数原型,也可以扩展作用域,
#include 头文件名
头文件内,包含各个函数的声明即可,结构体,类等也可以。
(课程设计中,多文件组织形式)
20、头文件和标准库
一般包含:自定义类型声明:结构体,类
函数声明,内置函数定义,宏定义,全局变量定义,外部变量定义,
头文件是源文件的借口(.h文件与.cpp文件)
一般用户自己编写的头文件可以在文件名后面加上.h
21、一维数组初始化,可以只对一部分元素赋初值,其他默认为0,全部元素赋初值的时候可以不指定长度。
二维数组初始化,部分赋初值时,只对第一列开始的元素赋值,其余赋值为0,并且,一般来说,一维长度可以不指定,二维必须指定。
22、字符数组
基本的输入输出
char str[20];
cin>>str;
cout<<str; 输出整个字符串
cout<<str[4]; 输出单个元素
23、C++的字符串函数
一般头文件声明string或string.h
char str1[30]="kagura and mea"
char str2[]="kemurikusa"
1、字符串连接函数,返回第一个字符数组的地址
cout<<strcat(str1,str2,n)
cout<<str1
两个输出得到相同的值,devc++可用
2、字符串复制函数,将后者中的字符(可以为字符串常量或字符数组)复制(覆盖)到前者中,n表示复制前n个字符
不可以直接直接赋值语句将常量赋给字符数组
char str1[10],char str2[]="klito"
strcpy(str1,"aqua");
strcpy(str1,str2);
strcpy(str1,str2,2);
devc++前者可用,后者不可(话说,明明写的一样的变量,给我报未声明,害的我害的复制前面声明的)
3、字符串比较函数strcmp
strcmp(str1,str2)
前者 等于,大于,小于 后者,返回0,一正整数,一负整数。
4、字符串长度函数strlen()
char str1[20]="asuaalice";
strlen(str1)
返回的是字符串的有效长度
有点太长了,另起一文,