C++学习笔记 Ⅱ

本文详细讲解了C++中的指针概念,包括内存地址表示、不同类型指针的内存占用、空指针与野指针的区别,以及指针与数组、函数的交互。还涉及结构体的使用,如定义、访问、数组和指针操作,以及结构体嵌套和作为函数参数的应用实例。
摘要由CSDN通过智能技术生成

C++学习笔记 Ⅱ

指针

可以通过指针间接访问一段内存
注意:

  1. 内存编号都是从0开始的,一般用十六进制数来表示;
  2. 可以利用指针变量保存地址;

语法:
数据类型 * 指针变量
例:

int a = 10;
int *p;
p = &a;

直接输出p为p指向的地址
如果需要输出p指向的地址内内容
可以通过解引用的方法:
在指针变量前加 “*”

指针占用的内存空间

32位操作系统占用4个字节
64位操作系统占用8个字节

空指针

指针变量指向内存编号为0的指针
用途: 初始化指针变量
注意: 空指针指向的内存不能被访问
int *p = NULL;

野指针

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

const修饰指针
  1. const修饰指针 —常量指针
    const int *p = &a;
    指针的指向可以修改,但指针指向的值不可以修改;
  2. const修饰常量 —指针常量
    int * const p = &a;
    指向指向的值可以修改,但指针的指向不可以修改;
  3. const既修饰指针又修饰常量
    const int * const p = &a;
    指针的指向和指向的值都不可以修改;
指针和数组

利用指针访问数组中的每个元素

#include<iostream>
using namespace std;

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = arr;
	for (int i = 0; i < 10; i++)
	{
		cout << *p << endl;
		p++;
	}

	return 0;
}

结果:
在这里插入图片描述

指针和函数

利用指针做函数参数,可以修改实参的值;
例:
利用指针交换两数的值

#include<iostream>
using namespace std;

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

int main()
{
	int a = 10;
	int b = 20;
	cout << "交换前:" << endl;
	cout << "a=" << a << " " << "b=" << b << endl;
	swap_01(&a, &b);
	cout << "交换后:" << endl;
	cout << "a=" << a << " " << "b=" << b << endl;
}

结果:
在这里插入图片描述

指针、数组、函数

例:
封装一个函数,利用冒泡排序,实现对整型数组的升序排列

#include<iostream>
using namespace std;

void bubbS(int *arr,int len)
{
	for (int i = 0; i < len; i++)
	{
		for (int j = 0; j < len - 1 - i; j++)
		{
			if (arr[j]>arr[j+1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}

void PrintArr( int *arr,int len)
{
	for (int i = 0; i < len; i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;
}

int main()
{
	int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };
	int len = sizeof(arr) / sizeof(arr[0]);
	cout << "排序前:";
	PrintArr(arr, len);
	bubbS(arr,len);
	cout << "排序后:";
	PrintArr(arr, len);

}

结果:
在这里插入图片描述

结构体

结构体属于用户自定义的数据类型,允许用户存储不同的数据类型;
语法: struct 结构体名{结构体成员列表};
通过结构体创建变量的三种方法:

  1. struct 结构体名 变量名;
  2. struct 结构体名 变量名 = { 成员1值,成员2值…};
  3. 定义结构体时顺便创建变量;
    例:
#include<iostream>
using namespace std;
#include<string>

struct Student
{
	string name;
	int age;
	int score;
}s3;

int main()
{
	struct Student s1;
	s1.name = "大哥";
	s1.age = 22;
	s1.score = 100;
	cout << "姓名:" << s1.name <<" " << "年龄:" << s1.age << " " << "分数:" << s1.score << " " << endl;

	struct Student s2 = { "二弟",20,98 };
	cout << "姓名:" << s2.name << " " << "年龄:" << s2.age << " " << "分数:" << s2.score << " " << endl;

	s3.name = "三弟";
	s3.age = 18;
	s3.score = 60;
	cout << "姓名:" << s3.name << " " << "年龄:" << s3.age << " " << "分数:" << s3.score << " " << endl;

}
结构体数组

将自定义的结构体放入数组中方便维护
语法: struct 结构体名 数组名[元素个数] = { {},{},... };
例:

#include<iostream>
using namespace std;
#include<string>

struct Student
{
	string name;
	int age;
	int score;
};

int main()
{
	struct Student sarr[3] =
	{
		{"大哥",22,100},
		{"二哥",20,98},
		{"三弟",18,60}
	};
	sarr[2].score = 61;

	for (int i = 0; i < 3; i++)
	{
		cout << "姓名:" << sarr[i].name << " " << "年龄:" << sarr[i].age << " " << "分数:" << sarr[i].score << " " << endl;
	}
}

结果:
在这里插入图片描述

结构体指针

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

  • 通过操作符 -> 可以通过指针访问结构体属性
    例:
#include<iostream>
using namespace std;
#include<string>

struct Student
{
	string name;
	int age;
	int score;
};

int main()
{
	struct Student s1;
	s1.name = "大哥";
	s1.age = 22;
	s1.score = 100;

	Student* p = &s1;

	cout << "姓名:" << p->name << " " << "年龄:" << p->age << " " << "分数:" << p->score << " " << endl;
}

结果:
在这里插入图片描述

结构体嵌套结构体

例: 创建一个老师信息,包含所带学生信息

#include<iostream>
using namespace std;
#include<string>

struct Student
{
	string name;
	int age;
	int score;
};

struct Teather
{
	int id;
	string name;
	int age;
	struct Student s1;
};



int main()
{
	struct Student s1;
	s1.name = "小宝子";
	s1.age = 22;
	s1.score = 100;

	struct Teather t1;
	t1.id = 2022;
	t1.name = "老可爱";
	t1.age = 25;

	cout << "老师id:" << t1.id << " "<< "老师姓名:" << t1.name << " " << "老师年龄:" << t1.age << " "  << endl;
	cout << "该老师辅导的学生姓名:" << s1.name << " " << "学生年龄:" << s1.age << " " << "学生分数:" << s1.score << endl;
}

结果:
在这里插入图片描述

结构体做函数参数

例: 将学生信息传入到函数中,打印学生信息

#include<iostream>
using namespace std;
#include<string>

struct Student
{
	string name;
	int age;
	int score;
};

void prints1(struct Student s1)
{
	cout << "姓名:" << s1.name << " " << "年龄:" << s1.age << " " << "分数:" << s1.score << " " << endl;
}

void prints2(struct Student* p)
{
	cout << "姓名:" << p->name << " " << "年龄:" << p->age << " " << "分数:" << p->score << " " << endl;
}

int main()
{
	struct Student s1;
	s1.name = "大哥";
	s1.age = 22;
	s1.score = 100;
	prints1(s1);

	struct Student s2 = { "二弟",20,98 };
	prints2(&s2);
	
}

结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值