当前位置 : 主页 > 编程语言 > c语言 >

c++基础入门2

来源:互联网 收集:自由互联 发布时间:2023-09-07
一、数组 1、概述 所谓数组,就是一个集合,里面存放相同类型的数据元素 特点: 1、数组中的每个数据元素都是相同的数据类型 2、数组是由连续的内存位置组成的 2、一维数组 (1)

一、数组

1、概述

所谓数组,就是一个集合,里面存放相同类型的数据元素

特点:

1、数组中的每个数据元素都是相同的数据类型

2、数组是由连续的内存位置组成的

2、一维数组

(1)、定义方式:

一维数组有中定义方式:

1、数据类型 数组名[数据长度];

2、数据类型 数组名[数据长度] = {值1,值2.....};

3、数据类型 数组名[] = {值1,值2......};

c++基础入门2_j基础入门

示例:

int main() {

	//一维数组定义
	//方式1
	int arr[5] = {0};
	//方式2
	int arr1[5] = { 1,2,3,4,5 };
	//方式3
	int arr2[] = { 6,7,8,9,0 };
	cout << "数组1:";
	for (int i = 0; i < 5; i++) {
		cout << arr1[i] ;
	}
	cout << "\n数组2:";
	for (int i = 0; i < 5; i++) {
		cout << arr2[i];

	}
	cout << "\n";
	system("pause");
	return 0;
}

c++基础入门2_数据类型_02


(2)、数组名:

用途:

1、用来统计整个数组在内存中的长度

2、可以获取数组在内存中的首地址

c++基础入门2_c++_03


示例:

c++基础入门2_数据类型_04


练习案例:

1、五只小猪称体重

案例描述:

在一个数组中记录了五只小猪的体重,如:int arr[5] = {300,350,200,400,250};找出并打印最重的小猪体重

代码示例:

int main() {
	
	//五只小猪称体重
	int weight = 0;
	int arr[5] = { 12,34,56,78,43 };
	for (int i = 0; i < (sizeof(arr) / sizeof(arr[0]));i++) {
		if (weight < arr[i]) {
			weight = arr[i];
			cout << "当前最重小猪:" << weight << endl;
		}
	}
	cout << "最重小猪:" << weight << endl;

	system("pause");
}

执行效果:

c++基础入门2_j基础入门_05


2、数组元素逆置

案例描述:

请声明一个5个元素的数组,并且将元素逆置.

(如原数组元素为:1,3,2,5,4;逆置后输出结果为:4,5,2,3,1);

代码示例:

int main() {
	int arr[5] = { 1,2,3,4,5 };
	int tmp = 0;
	int length = sizeof(arr) / sizeof(arr[0]);
	//打印逆置前
	cout << "逆置前:";
	for (int j = 0; j < length;j++) {
		cout << arr[j]<<" ";
	}
	cout << "\n";
	//逆置
	for (int i = 0;i<(length / 2);i++) {
		tmp = arr[i];
		arr[i] = arr[length - i-1];
		arr[length - i-1] = tmp;
	}
	//打印逆置后
	cout << "逆置后:";
	for (int k = 0; k < length; k++) {
		cout << arr[k] << " ";
	}
	cout << "\n";

	system("pause");
	return 0;
}

执行效果:

c++基础入门2_j基础入门_06


(3)、冒泡排序

作用:最常用的排序算法,对数组内元素进行排序

1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。

2、对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。

3、重复以上的步骤,每次比较次数-1,直到不需要比较

示例: 将数组 { 4,2,8,0,5,7,1,3,9 } 进行升序排序

代码示例:

int main() {
	//40/4 = 10
	int arr[] = { 4,2,8,0,5,7,1,3,9 };
	int length = sizeof(arr) / sizeof(0);
	int tmp = 0;
	//排序前
	cout << "排序前";
	for (int k = 0; k < length; k++) {
		cout << arr[k];
	}

	cout << "\n";

	//排序
	for (int j = 0; j < length;j++) {
		for (int i = 0; i < length-1; i++) {
			if (arr[i] > arr[i + 1]) {
				tmp = arr[i];
				arr[i] = arr[i + 1];
				arr[i + 1] = tmp;
			}

		}
	}

	//排序后
	cout << "排序后";
	for (int k = 0; k < length;k++) {
		cout << arr[k];
	}
	cout << "\n";
	system("pause");
	return 0;
}

执行效果:

c++基础入门2_c++_07


3、二维数组

(1)、二维数组的四种定义方式:

1、数据类型 数组名 [行数][列数];

2、数据类型 数组名 [行数][列数] = {{数据1 ,数据2},{数据3,数据4}};

3、数据类型 数组名 [行数][列数] = {数据1,数据2,数据3,数据4};

4、数据类型 数组名 [ ][列数] = {数据1,数据2,数据3,数据4};

建议:以上四种方式,第二种最直观,提高代码的可读性

示例:

c++基础入门2_c++_08


(2)、二维数组数组名

作用:

1、查看二维数组所在空间

2、获取二维数组的首地址

示例:

c++基础入门2_j基础入门_09


总结:

1、二维数组名就是这个数组的首地址

2:对二维数组名进行sizeof时,可以获取整个二维数组占用的内存空间大小

3、二维数组可以看成是两个一维数组嵌套

二、函数

1、概述

作用:将一段经常使用的代码封装起来,减少重复的代码

一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能

2、函数的定义

函数的定义一般主要有5个步骤:

1、返回值类型

2、函数名

3、参数列表

4、函数体语句

5、return表达式

语法:

返回值的类型 函数名 (参数列表){

函数体语句

return 表达式

}

示例:

c++基础入门2_数据类型_10


3、函数的调用

功能:使用定义好的函数

语法:函数名(参数)

示例:

c++基础入门2_数据类型_11


4、值传递

所谓值传递,就是函数调用时,实参将数值传入给形参

值传递时,如果形参发生改变,并不会影响实参

5、函数的常见形式

常见的函数样式有四种

1、无参无反

2、有参无反

3、无参有反

4、有参有反

示例:

void test1() {
	cout<<"这是无参无反函数"<<endl;
}

int test2() {
	cout << "这是无参有反函数" << endl;
	return 1;
}

void test3(int a) {
	
	cout << "这是有参无反函数:"<<a << endl;
}

int test4(int x) {
	cout << "这是有参有反函数:" <<x<< endl;
	return x;
}

int main() {
	//无参无反
	test1();
	//无参有反
	test2();
	//有参无反
	int a = 10;
	test3(10);
	//有参有反
	int x = 20;
	test4(x);

}

c++基础入门2_j基础入门_12


6、函数的声明

作用:告诉编译器函数名称以及如何调用函数,函数的实际主体可以单独定义

语法:数据类型 函数名(参数列表);

注:函数的声明可以多次,但函数的定义只能有一次

示例:

c++基础入门2_j基础入门_13


7、函数的分文件编写

作用:让代码结构更加清晰

函数分文件编写一般分为4个步骤:

1、创建一个.h的头文件

2、创建后缀名为.cpp的源文件、

3、在头文件中写函数声明

4、在源文件中写函数的定义

示例:

c++基础入门2_数据类型_14


三、指针

1、指针的基本概念

指针的作用:可以通过指针间接访问内存

注意事项:

1、内存编号是从0开始记录的,一般使用十六进制的数字表示

2、可以利用指针变量保存地址

2、指针变量的定义和使用

指针变量定义语法:数据类型* 指针变量名;

示例:

int main() {

	//指针定义
	int a = 10;
	int* p = &a;
	cout << "a的地址:" << &a << endl;
	cout << "p的地址:" << p << endl;

	//指针使用
	cout << "存放在p地址的值:" << *p << endl;

}

c++基础入门2_数据类型_15

c++基础入门2_数据类型_16


3、指针所占的内存空间

提问:指针也是一种数据类型,那么这种数据类型占用多少内存空间?

答:在32位操作系统,占用4个字节,64位,占8个字节

示例:

c++基础入门2_j基础入门_17

c++基础入门2_j基础入门_18


4、空指针和野指针

空指针:指针变量指向的内存是编号为0的空间

用途:初始化指针变量

注意:空指针指向的内存是不可以访问的

示例:

c++基础入门2_j基础入门_19

c++基础入门2_数据类型_20


野指针:指针变量指向一个非法的内存空间(指向未知内存空间)

示例:

c++基础入门2_数据类型_21


5、const修饰指针

const修饰指针有三种情况:

1、Const修饰指针 --常量指针(指向常量的指针)

2、Const修饰常量 --指针常量(指针是常量)

3、Const即修饰指针,有修饰常量(指针和值都不可修改)

c++基础入门2_数据类型_22

c++基础入门2_c++_23

c++基础入门2_j基础入门_24


6、指针和数组

作用:利用指针访问数组中的元素

示例:

//指针和数组
int main() {
	int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
	int* p = arr;
	for (int i = 0; i < 10;i++) {
		cout << "第" << i << "个数组元素的值是:" << *p<<endl;
		p++;
	}
}

c++基础入门2_j基础入门_25


7、指针和函数

作用:利用指针做函数参数,可以修改实参的值,即地址传值

示例:

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

//指针和函数
int main() {
	//地址传值
	int a = 10;
	int b = 20;
	cout <<"调用前" <<a << " " << b<<endl;
	swap(&a,&b);
	cout << "调用后" << a<<" " << b;
}

c++基础入门2_j基础入门_26


四、结构体

1、结构体的基本概念

结构体属于用户自定义的数据类型,允许用户存储不同的数据类型

2、结构体的定义和使用

语法:struct 结构体名{结构体成员列表};

通过结构体创建变量的方式有三种:

1、struct 结构体名 变量名

2、struct 结构体名 变量名 = {成员1值,成员2值......}

3、定义结构体的时候顺便创建变量

示例:

int main() {

	//三种变量定义方式
	//1、
	struct student s1;
	s1.name = "zhangsan";
	s1.age = 18;
	s1.score = 100;
	cout << "学生:" << s1.age << "年龄:" << s1.age << "成绩:" << s1.score << endl;

	//2、
	student s2 = { "lisi",19,101 };
	cout << "学生:" << s2.age << "年龄:" << s2.age << "成绩:" << s2.score << endl;

	//3、
	s3.name = "laoliu";
	s3.age = 20;
	s3.score = 102;
	cout << "学生:" << s3.age << "年龄:" << s3.age << "成绩:" << s3.score << endl;

	system("pause");
	return 0;
}

c++基础入门2_c++_27


注意:

在C++中,创建变量时,struct关键字可以省略

3、结构体数组

作用:将自定义的结构体放入到数组中,方便维护

语法:struct 结构体名 数组名[元素个数] = { {} ,{}...}

示例:

c++基础入门2_j基础入门_28


4、结构体指针

作用:通过指针访问结构体中的成员

利用操作符->,可以通过结构体指针访问结构体属性

语法:指针名->属性

示例:

c++基础入门2_j基础入门_29


5、结构体嵌套结构体

作用:结构体中的成员可以是另一个结构体

例如:每一个老师辅导学员,一个老师的结构体中,记录一个学生的结构体

示例:

c++基础入门2_数据类型_30


6、结构体做函数参数

作用:将结构体作为参数向函数传递

传递方式有两种:

1、值传递

2、地址传递

示例:

c++基础入门2_c++_31

c++基础入门2_j基础入门_32


7、结构体中const使用场景

作用:用const来防止误操作(常量指针)

示例:

c++基础入门2_j基础入门_33



上一篇:STM32F407学习
下一篇:没有了
网友评论