目录
- 控制结构
- for循环执行流程
- break 语句
- goto
- 函数
- 函数调用的过程:
- 默认形参问题
- 函数重载问题
- 内联函数的展开和重载函数的绑定在编译阶段进行
- c++常用的系统函数
- 枚举类型
- 数组
- 数组的初始化
- 数组元素的表示方法:
- 字符数组的初始化问题
- 结束语
控制结构
for循环执行流程
for(表达式一;表达式二;表达式三)
{循环体}
首先判断表达式二如果为true则执行循环体一次,然后执行表达式三,再判断一下表达式二,
………
break 语句
break只能跳出本层循环,并不能跳出嵌套它的其他循环
比如while()//循环一
{
while()//循环二
{
break;//只能跳出循环二,不能跳出循环一
}
}
goto
语法
条件 goto 标识符;
……
goon 标识符:……;
程序调到goon 标识符后面的代码继续执行
但是需要注意的是:goto语句的使用被限制在一个函数体内
函数
不可以在一个函数体内定义另一个函数
没有返回值的函数 如果要写return语句的话
直接写return;
函数调用的过程:
首先保存调用函数下一条语句的地址压入栈中
然后读取函数中的实参从后往前依次压入栈中
把实参的值赋值给形参 然后一条一条地执行函数体语句 最后如果没有返回值 则直接取出最开始保存的地址 跳转到地址处继续执行代码 如果有返回值 那么先保存返回值返回后 然后再继续执行下面的代码。
默认形参问题
带有默认值的形参右边的所有形参都必须有默认值
而且在调用的时候 如果一个带有默认值的形参位置没有传实参,那么这个位置右边所有的参数都不传实参
函数重载问题
函数名相同,返回值可以不同,也可以相同,参数类型和数量可以不同
注意:其他都相同仅仅返回值类型不同是不行的,编译会出错
确定调用那个函数的过程被称作绑定
绑定的优先次序为精确匹配 ->对实参的类型向告类型的匹配->对实参类型向低类型以及相容类型转换后的匹配
内联函数的展开和重载函数的绑定在编译阶段进行
c++常用的系统函数
1、求平方根:
double sqrt(double x);
2、求绝对值:
int abs(int x);
labs(long x);
dabs(double x);
3、指数函数
double pow(double x,double y); //返回x的y次方
double exp(double x);//返回e的x次方
double sin(double x);//正弦
double cos(double x);//余弦
double tan(double x);//正切
double asin(double x);//反正弦
double ascn(double x);//反余弦
double atan(double x);//反正切
double ceil(double x);//不小于x的最小整数
double floor(double x);//不大于x的最大整数
int isalpha(int x);//是否是字幕 按照ascll码比较int isdigit();//是否是数字
int tolower(int x);//转为小写字母
int toupper(int x);//转为大写字母
枚举类型
枚举类型的值并不是初始化时写的值 而是对应地常数 初始化写的只是标识符 但是给枚举类型变量赋值的时候不可以直接赋常数值 要赋你写的标识符,或者强转为枚举类型
例如:enum weekday{MON,TUE,WEN,THU,FRI,SAT,SUN};
weekday day1= weekday(0);
枚举类型的变量不能直接输入
数组
数组的初始化
函数里的数组没有初始化的元素 为随机值
函数外未初始化的数组 被初始化为0
数组初值表可以以逗号结尾 也可以没有逗号
数组元素的表示方法:
a[n]=a+n*sizeof(type)=a+n;
数组名是一个地址常量不能作为左值
字符数组的初始化问题
不可以用字符初始化字符数组:
例如: char arry[]=‘a’;//错误
但是可以用字符串初始化:
例如: char arry[]="\0";//将字符数组初始化为空串
不可以用字符串变量初始化
例如:
std::string str=“niganma”;
char arry[]=str;//错误
char arry[8]=str;//错误
但是可以将字符串变量转换乘c风格的字符串之后 再用strcpy函数可以将其赋值给字符数组
承接上面:
char g[8];
strcpy(g,str.c_str());
对于c风格的字符串也不可以直接用来初始化字符数组 必须使用strcpy()函数来初始化
但是可以用字符串常量初始化
例如:
char arry[]=“niganma”;//正确
char arry[7]=“niganma”;//错误 注意字符串的结尾为’\0’ 虽然算进字符数组的长度但是占一个字节的空间
char arry[8]=“niganma”;//正确
for(auto x:arry)
std::cout<<x<<" ";// n i g a n m a 并不会输出’\0’ 因为’\0’是结束符 遇到它就结束了
但是会占一个字节的空间 sizeof(arry)=8; strlen(arry)=7;
结束语
看似寻常最奇绝,成如容易却艰辛。
今天先写到这里,不要心急,不要贪多,慢慢来,相信一切都会变好的,加油!!!