c++基础入门2

目录

一、数组

1、概述

2、一维数组

3、二维数组

二、函数

1、概述

2、函数的定义

3、函数的调用

4、值传递

5、函数的常见形式

6、函数的声明

7、函数的分文件编写

三、指针

1、指针的基本概念

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

3、指针所占的内存空间

4、空指针和野指针

5、const修饰指针

6、指针和数组

7、指针和函数

四、结构体

1、结构体的基本概念

2、结构体的定义和使用

3、结构体数组

4、结构体指针

5、结构体嵌套结构体

6、结构体做函数参数

7、结构体中const使用场景


一、数组

1、概述

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

特点:

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

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

2、一维数组

(1)、定义方式:

一维数组有中定义方式:

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

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

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

示例:

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;
}

(2)、数组名:

用途:

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

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

示例:

练习案例:

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");
}

执行效果:

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;
}

执行效果:

(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;
}

执行效果:

3、二维数组

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

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

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

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

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

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

示例:

(2)、二维数组数组名

作用:

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

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

示例:

总结:

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

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

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

二、函数

1、概述

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

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

2、函数的定义

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

1、返回值类型

2、函数名

3、参数列表

4、函数体语句

5、return表达式

语法:

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

函数体语句

return 表达式

}

示例:

3、函数的调用

功能:使用定义好的函数

语法:函数名(参数)

示例:

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);

}

6、函数的声明

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

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

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

示例:

7、函数的分文件编写

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

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

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

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

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

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

示例:

三、指针

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;

}

3、指针所占的内存空间

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

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

示例:

4、空指针和野指针

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

用途:初始化指针变量

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

示例:

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

示例:

5、const修饰指针

const修饰指针有三种情况:

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

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

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

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++;
	}
}

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;
}

四、结构体

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++中,创建变量时,struct关键字可以省略

3、结构体数组

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

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

示例:

4、结构体指针

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

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

语法:指针名->属性

示例:

5、结构体嵌套结构体

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

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

示例:

6、结构体做函数参数

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

传递方式有两种:

1、值传递

2、地址传递

示例:

7、结构体中const使用场景

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

示例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值