C++学习记录--C++基础2

学习b站黑马程序员C++课程记录

数组

是一个集合,里面包含相同类型的元素
连续的内存空间
语法:定义的三种方式
1.数据类型 数组名[数组长度];
2.数据类型 数组名[数组长度] = {值1,值2…};
3.数据类型 数组名[] = {值1,值2…}
C++数组从0开始索引
数组

数组名用途

1.统计整个数组在内存中的长度 sizeof(arr)
2.可以获取数组在内存中的首地址

二维数组

在一维数组基础上增加了一个维度
语法:定义的四种方式
1.数据类型 数组名[行数][列数];
2.数据类型 数组名[行数][列数] = {{数据1,数据2},{数据3,数据4}};
3.数据类型 数组名[行数][列数] = {数据1,数据2,数据3,数据4};
4.数据类型 数组名[][列数] = {数据1,数据2,数据3,数据4};
二维数组

二维数组名

1.查看二维数组所占内存空间
2.可以查看二维数组的首地址

函数

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

返回值类型 函数名(参数列表)
{
	函数体语句
	return 表达式
}

函数的调用

语法:函数名(参数)
实参:实际参数(有真实数据的参数)
形参:形式参数(形式上的参数)

值传递

值传递示例
输出:
a=10 b=20
num1=10 num2=20
num1=20 num2=10
a=10 b=20
原因如图所示:
参数传递

函数的声明

告诉编译器不要因为没有看见max函数的完整定义就报错

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

函数的分文件编写

让代码的结构更加清晰
函数分文件编写一般有四个步骤
1.创建后缀为.h的头文件
2.创建后缀为.cpp的源文件
3.头文件中写函数的声明
4.在源文件中写函数的定义

首先创建swap.h头文件

#include<iostream>
using namespace std;

void swap(int a, int b)

接着创建swap.cpp源文件

#include"swap.h"   //双引号代表是自己写的头文件,并且告诉编译器这个源文件swap.cpp和头文件swap.h是配套的

void swap(int a, int b)
{
	int temp = a;
	a = b;
	b = temp;
	cout << "a = " << a << endl
	cout << "b = " << b << endl
}

然后在新的一个cpp文件中再包含一次#include "swap.h"就可以直接使用swap函数了

指针

作用:通过指针间接访问内存
指针就是一个地址
指针
定义语法:数据类型 * 指针变量

int a = 10;
int * p;
p = &a;//取地址符    int * p = &a
cout << "a的地址为:" << &a << endl
cout << "指针p为:" << p << endl;

//可以通过解引用方式找到指针指向的内存
//指针前加*代表解引用,找到指针指向的内存中的数据
*p = 1000;
cout << "a = " << a << endl;
cout << "*p = " << *p << endl;

指针所占的内存空间

32位操作系统下,占用4个字节
654位操作系统下,占用8个字节

空指针和野指针

空指针:指针变量指向内存中编号为0的空间
用途:初始化指针变量

空指针不能访问

int * P = NULL;

野指针:指针变量指向非法的内存空间

int * p = (int *)0x1100;
 
cout << *p << endl;

空指针和野指针都不是我们申请的空间,因此不要随意访问!!!

const修饰指针

const修饰指针的三种情况:
1.const修饰指针 --常量指针
2.const修饰常量 --指针常量
3.const既修饰指针,又修饰常量
常量指针
常量指针
指针常量
指针常量
const既修饰指针,又修饰常量
既修饰指针,又修饰常量

指针和数组

int arr[10] = {1,2,3,4,5,6,7,8,9,10};
cout << "第一个元素为:" << arr[0] << endl;
int * p = arr;  //arr即数组首地址
cout << ”利用指针访问第一个元素“ << *p << endl;
p++; //让指针向后偏移4个字节
cout << ”利用指针访问第二个元素“ << *p << endl;

输出的值即为arr[0],arr[0],arr[1]对应的值

指针和函数

void swap02(int *p1, int *p2)
{
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}
int a = 10;
int b = 20;

//地址传递
swap02(&a, &b);
cout << "a = " << a << endl;
cout << "b = " << b << endl;

可以从输出中看见a与b的值发生了交换,原本的值传递中形参无法改变实参的值

结构体

用户自定义的数据类型
定义语法:struct 类型名称{成员列表 }
使用:
1.struct Student s1
2.struct Student s2 = {…}
3.在定义结构体时顺便创建结构体变量

struct Student
{
	string name;   //注意包含string头文件
	int age;
	int score;
}s3;

int main()
{
	struct Student s1;
	s1.name = "张三";
	s1.age = 18;
	s1.score = 100;

	cout << "姓名:" << s1.name << "年龄:" << s1.age << "分数:" << s1.score << endl;
	struct Student s2 = {”李四“, 19, 60};
	cout << "姓名:" << s2.name << "年龄:" << s2.age << "分数:" << s2.score << endl;
	s3.name = "张三";
	s3.age = 18;
	s3.score = 80;
	cout << "姓名:" << s3.name << "年龄:" << s3.age << "分数:" << s3.score << endl;
}

1.创建结构体变量时类型关键字struct可以省略
2.创建结构体变量时,关键字struct可以省略
3.结构体变量利用操作符”.“访问成员

结构体数组

作用:将自定义结构体放入数组中方便维护
语法:struct 结构提名 数组名[元素个数] = {{},{},{},…}

结构体指针

//创建结构体变量
student s = {”张三“, 18, 100};

//通过指针指向结构体变量
student * p = &s;

//通过指针访问机构提变量中的饿数据
cout << "姓名:" << p->name << "年龄" << p->age << "分数:" << p->score << endl;
  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值