C++学习笔记2

控制程序流程
1>使用if else
2>嵌套if语句
if(){if(){}} 与java相同

3>switch case :能够将特定表达式与一系列常量进行比较,并根据表达式的值时执行不同的操作。经常会使用C++新增的关键字switch case default break

switch(a){
case 2:

break;
case 3:
xxx
break;
default:
xx
break;
}

4>使用? : 进行条件处理(三目运算符)

int max = (num1 > num2) ? num1 : num2;

注意:不要包含两个标签相同的case语句,这即不符合逻辑,也无法通过编译
使用三目运算符? : 时,不要使用复杂的条件和表达式

5>在循环中执行代码

不成熟的goto循环:goto指示跳到代码的特定位置继续执行,您可使用它回过头去再次执行特定的语句
void gotoUtil(){
int i = 0;
Start:
i++;
std::cout << “i :” << i << std::endl;
if(i == 1){
goto Start;
}
}

6>while循环
while(expression){
xxx
}
只要expression为true,就将反复执行该语句

void whileUtil(){
int i = 0;
while(i < 10){
i++;
std::cout << "哈哈哈,i的值是:" << i << std::endl;
}
}

7>do…while循环
先执行一次do中的语句,确保他们至少执行一次

do{
}while(i < 102);

8>for 循环 与java相同
9>基于范围的for循环
for (VarType varName : sequence){
//xxx

int numbers[5] = {1,9,8,6,3};
int a = 0;
for(int i : numbers){
std::cout << "数组中的第" << a << "是:" << i << std::endl;
a++;
}
输出:
数组中的第0是:1
数组中的第1是:9
数组中的第2是:8
数组中的第3是:6
数组中的第4是:3

10>使用continue和break修改循环的行为
continue 能够调转到循环开头,即跳过本次循环,开始下一次循环
break 跳出循环语句

int numbers[5] = {1,9,8,6,3};
int a = 0;
for(int i : numbers){
std::cout << "数组中的第" << a << "是:" << i << std::endl;
a++;
if(numbers[a] == 8){
break;
}
}

使用函数组织代码
函数能够划分和组织程序的执行逻辑
函数原型 返回值类型 函数名 (函数参数);

1>函数定义 :函数的实现被称为函数定义
2>如果函数声明中包含形参,调用函数时必须提供实参
3>递归函数——调用自己的函数
在有些情况下,可让函数调用它自己,这样的函数称为递归函数,递归函数必须有明确的退出条件,满足这种条件后,函数将返回,而不再调用自己。

注意:如果没有存在退出条件或者存在bug,递归函数可能不断调用自己,直到栈溢出后停止,导致应用程序崩溃。

int GetFibNumber(int index){
if(index < 2){
return index;
}else{
return GetFibNumber(index - 1);
}
}
输出:
fidNumber :1

函数重载:名称和返回类型相同,但参数不同的函数被称为重载函数

const double PI = 3.1415926;
double Area(double radius){
return PI * radius * radius;
}

double Area(double radius,double height){
return 2 * Area(radius) + 2 * PI * radius * height;
}

cout << "圆的面积 :" << Area(10) << endl;
cout << "圆的面积2 :" << Area(5,2) << endl;
std::cout << "fidNumber :" << GetFibNumber(4) << std:

输出:
圆的面积 :314.159
圆的面积2 :219.911

将数组传递给函数

void DisplayInteger(int Number);
void DisplayInteger(int[] numbers,int Length);

按引用传递参数

void change(int a){
a = 10;
}

int main(){
int id = 2;
change(id);
cout << "查看id的值 :" << id << endl;

上述意味着函数调用不会影响main()中的变量,因为change()使用的是id包含的值的拷贝。
有时候,可能希望函数修改的变量在其外部中也可用,因此可将形参的类型声明为引用。

void change(int& a){
a = 12;
}

int main(){
int id = 2;
change(id);
cout << "查看id的值 :" << id << endl;

输出:
查看id的值 :12

引用的概念:
建立“引用”的作用是为一个变量起另一个名字,以便在需要时可以方便,间接的引用该变量,这就是变量名称的由来。对变量的引用的所有操作,实际上都是对其所代表的(原来的)变量的操作。

int a;
int &b = a;//声明b是一个整型变量的引用变量,它被初始化为a

关于引用的简单说明

(1)引用并不是一个独立的数据类型,它必须与某一种类型的数据相联系。声明引用时必须执定它代表的是哪个变量,即对它进行初始化。

int &b =a //正确,指定b是整型变量a的别名
int &b; //错误,没有指定b代表哪个变量
float a ;int&b = a; //错误,类型不符

(2)引用与所代表的变量共享同一内存单元,系统并不为引用另外分配存储空间。实际上,编译系统使引用和其代表的变量具有相同的地址。


   int a = 12;
   int& b = a;

   cout << "查看a的地址:" << &a << "查看b的地址:" << &b << endl;
   结果:地址相同
   

(3)当看到&a这样的形式时,怎样区别是声明引用还是取地址的操作?
请记住,当&a 的前面有类型符时(即int &a),它必然是对引用声明,如果前面没有类型符(如,p = &a),此时的&是取地址运算符。

(4)对引用的初始化,可以用一个变量名,也可以用另外一个引用。

   //对引用的初始化
   int c = 3;
   int &d = c;
   int &e = d;

将引用作为函数参数
(1)将变量名作为实参

传递是单向的,在执行函数期间形参值发生变化并不传回给实参,因为在调用函数时,形参和实参不是同一个存储单元。
下面的程序无法实现两个变量的值交换。

void swap(int a, int b) {
	int temp;
	temp = a;
	a = b;
	b = temp;
}

   int i = 3, j = 5;
   swap(i, j);
   cout << "i = " << i << "j = " << j << endl; //i 和 j 未交换

(2)传递变量的指针,为了解决(1)中的问题,可以用传递变量地址的方法。使形参得到一个变量的地址,这时形参指针变量执向实参变量单元。

void swap(int* p1, int* p2) {
	int temp;
	temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

//地址的交换
   swap(&i, &j);
   cout << "i = " << i << "j = " << j << endl; //i 和 j 的值交换

(3) 传递变量的别名:利用引用实现两个变量的值的交换

void swap2(int& a, int& b) {
	int temp;
	temp = a;
	a = b;
	b = temp;
}

//使用引用进行变量的交换
   swap2(i, j);
   cout << "使用引用进行交换的结果 :" << "i = " << i << "j = " << j << endl; //i 和 j 的值交换

对引用的进一步说明
(1)不能建立void 类型的引用
void& a = 9 ;//错误

(2)不能建立引用的数组

char c[6] = “hello”;
char& rc[6] = c; //错误
原因:数组名c只代表数组首元素的地址,本身并不是一个占有存储空间的变量

(3)可以将变量的引用的地址赋给一个指针,此时指针执向的是原来的变量

   int x = 3;
   int& y = x;
   int* p = &y;
   cout << "指针代表的值" << *p << endl;//结果3

(4)可以建立指针变量的引用

   //指针变量的引用
   int q = 5;
   int* w = &q;
   int* &t = w;

   cout << "输出的t的结果:" << *t << endl; // 结果5

(5)可以用const 对引用加以限定,不允许改变改引用的值

int i = 5;
const int &a = i;
a = 3;//企图改变引用a的值,错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值