c++基础知识(二)分支,循环,指针,引用,#define,typeof

104 阅读2分钟

1. if 分支

基本 if 语句,以下是基本 if 语句的结构。

if(条件){
  主体;
}

if 语句通过对条件进行求值,若结果为真(非 0),执行语句,否则不执行。

if...else 语句
if(条件){
  主体1;
}else{//否则
  主体2;
}

if...else 语句和 if 语句类似,else 不需要再写条件。当 if 语句的条件满足时会执行 if 里的语句,if 语句的条件不满足时会执行 else 里的语句。同样,当主体只有一条语句时,可以省略花括号。

2. 循环

2.1. for语句一般格式

//循环条件必须要写
for(循环变量赋初值;循环条件;循环变量增值){

  语句组;}  //{}里面的语句为循环体

执行过程:只有当循环条件为真时,才会执行循环体,否则退出循环。

#include <iostream>  //c++的导入 
using namespace  std;
int main () {
    //	i=10;i--返回值10,10>=i; 后面再减一,i=9;
    //如果把变量定义在for循环的初始化条件里面,i离开这个for循环,就失效了。 
	for(int i=10; i>=1; i-- ) {
		cout<<i<<endl;
	}
	return 0;
}

2.2 while循环

while(循环条件){
    语句;
    }

语句执行规则:先进行条件判断,当条件成立时,执行语句,否则退出循环。

2.3 break

跳出当前循环,【跳出离自己最近的那个while或for 循环】

  1. for循环 image.png
  2. while 循环

image.png

2.4 continue

continue是结束本次循环,进入下一次循环。

  1. while:重新进入下一轮的判断条件,循环体后面的内容都不执行,进入下一次循环。 image.png

  2. for:进入善后操作 image.png

3. sizeof

  1. sizeof(类型 或者 变量)表示求该类型的变量或者变量在当前环境所占的字节数
  2. sizeof(数组变量)/sizeof(数组变量的类型):数组的元素个数。

4. 数组赋值

  1. 通过下标赋值
  2. 按元素类型名 数组名[]={一系列的数组值},此时数组的大小就是{ }中与元素的个数

image.png

5. 二维数组

  1. 二维数组: 二维数组就是在一维数组上,多加一个维度。
  2. 二维数组定义方式:
  • 数据类型 数组名[ 行数 ] [列数];
  • 数据类型 数组名[行数][列数] = {{数据1,数据2,数据3},{数据4,数据5}};
  • 数据类型 数组名[ 行数 ][列数] ={数据1,数据2,数据3,数据4};
  • 数据类型 数组名[ ] [列数] = {数据1,数据2,数据3,数据4};

建议:以上4种定义方式,利用第二种更直观,提高代码的可读性;

  1. 实际上:二维数组在内存中是一行一行的存储。 image.png

5.1 二维数组的赋值

  1. 通过下标赋值
#include <iostream>  //c++的导入 
using namespace  std;

int main () {
//	2行5列,数组中元素的类型是int
	int ages[2][5];
//	遍历行下标。i,0,1
	for(int i=0; i<sizeof(ages)/sizeof(ages[0]); i++) {
// 遍历列下标,就,0,1,2,3,4
		for(int j=0; j<sizeof(ages[i])/sizeof(int); j++) {
			cin>>ages[i][j];
		}
	}

	for(int i=0; i<sizeof(ages)/sizeof(ages[0]); i++) {
// 遍历列下标,就,0,1,2,3,4
		for(int j=0; j<sizeof(ages[i])/sizeof(int); j++) {
			cout<<ages[i][j]<<"\t";// \t相当于4个空格
		}
		cout<<endl;
	}
	return 0;
}

image.png 2. 按元素类型

  • 分行给二维数组赋值,即也是将所有数据写在一个{}中,在其内部,在把属于同一行的数据用{}括起来,数据之间用逗号隔开 。
  • 对于每一行的元素也不必全部赋值,可以只给某一行的前几个元素赋值,如果对二维数组中间或前面行的所有元素都不初始化,但每一行对应的{}必须列出,即使里面没有任何数据;
  • 如果对二维数组的最后行的所有元素都不初始化,则其对应的{}可以列出,也可以不列出,但最外层{}内的{}数量不能超过数组的行数。
int a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
for (int i = 0; i < 3; i++) {
	for (int j = 0; j < 4; j++) {
		cout << a[i][j] << ' ';
	}
}

image.png

6. 指针和引用

6.1 *指针

指针:指向元素在内存中的地址(内存地址的编号)

  1. int/char/double/bool *varName,表示定义了一个可以指向类型为int/char/double/bool的元素的地址的指针
#include <iostream>  //c++的导入 
using namespace  std;
int main() {

	int age=5;
	//取得age这个int类型的元素的地址,用int类型的指针的poninter指向age的地址
	int *pointer=&age;
        
	//解引用:修改指针指向的内存里的值。(修改age内存单元里的值为14 )
    //操作这个元素的值,age也会跟着改变
	*pointer=14;
	
	return 0;
}
  1. 理解
	int b=10;
	int &a=b;//此时a,b,共享同一块内存单元,地址相同,
           //引用相当于指针,但是把解引用给隐藏了。
	a=14;//c操作a元素,b也会跟着改变

4bd27c965d2ea6f39a5ccb3134177e4.jpg

6.2案例理解

  1. 第一步 image.png
  2. 第二步

image.png

  1. 第三步

image.png 4. 第四步

image.png

  1. 第五步

image.png

7. #define

  1. 定义:#define 字符串1 字符串2
  • 在后面每当遇见字符串1,就会被替换成字符串二,不可二次赋值。
#include <iostream>  //c++的导入 
using namespace  std;
#define MaxSize 100
int main() {
	cout<<MaxSize<<endl;
	return 0;
}

#define是C++中的一个预处理器指令,用于定义一个常量或者作为宏使用。其语法为:#define macro-name replacement-text

其中,macro-name指定要定义的标识符名称,而replacement-text则是用macro-name替换的文本。

8. typedef 起别名

  1. 定义:typedef 某类型 字符串;

image.png 2. 两者定义变量等价的 image.png 3.案例 image.png