c++学习笔记 指针和内存的关系及它的逆向引用

c++学习笔记

指针和内存的关系及它的逆向引用 pointers in c++

视频教程:youtube 原链接:https://www.youtube.com/playlist?list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb


讲述原始指针(raw pointer)而非智能指针(smart pointer)

1. 内存的重要性

计算机和内存打交道,内存是计算机的一切,也是编程中最重要的东西。
当你编写一个程序并启动,,整个程序被载入内存,所有对计算机的指令都被加载到内存中,这就是cpu访问程序并执行指令的方式。
当你创建一个变量,或者从硬盘中载入数据时,都将会被存储到内存中
而指针对管理和操纵内存极为重要

2. 指针是什么

指针是一个整数,它存储一个内存地址

#include <iostream>

#define LOG(x) std::cout << x << std::endl

int main()  
{
   void* ptr = 0;
   std::cin.get();  
}

void,没有任何类型。我们给ptr这个指针一个为0的内存地址。0不是一个有效的内存地址,意味着这个指针无效。0可以换成NULL或者nullptr
然后我们创建一个变量,用’&'运算符取它的地址

int main()
{
	int var = 8;
	void* ptr = &var;
	std::cin.get();
}

这样我们就把变量var的地址存储在了一个指针ptr中
指针是一个包含地址的变量

3. 逆向引用

现在我们定义了一个指向内存地址的指针,但是当我们想去写入或读取数据,更改这个变量的数值的时候该怎么做,这时候逆向引用就会派上用场
当我们去更改指针指向地址的数值时,需要给指针定义一个类型

int main()
{
	int var = 8;
	int* ptr = &var;
	*ptr = 10;
	std::cin.get();
}

运行这段程序后,var的值会变成10.

创建任意内存大小的变量
int main()
{
	char* buffer = new char[8];
	memset(buffer,0,8);
	delete[] buffer;
}

使用char创建一个名为buffer的8bytes的变量,使用memset填充指定内存,()内第一个是指定内存的开头,第二个是要填充的数值,第三个是填充内存大小。
上述代码中,我们使用了new这个关键字,因此该数据分配在heap上,我们还应该在处理完后使用delete删除这个数据。
指针本身也是变量,存储在内存中,因此我们可以有double pointers, triple pointers 之类的操作

int main()
{
	char* buffer = new char[8];
	memset(buffer,0,8);

	char** ptr = &buffer;

	delete[] buffer;
}

运行以后ptr地址存储的值是buffer地址

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值