C++指针探究

周五听实习师父指点了一下C++的强制类型转换概念,师父说了一句“强制类型转换其实就是告诉编译器不用检查当前位置的类型,程序猿自己知道类型”。

今天整理之前的学习笔记的时候又发现,在MSVC2019编译器下,int*指针和int类型都占4个字节的内存。那么是否可以不通过指针操作其指向的内存,直接使用一个int整数来代替这个指针操作其指向的内存呢?

实际测试了一下发现确实是可以的,由于int*指针中存放的地址其实就是一个占4字节的16进制的整数,因此地址其实可以强制转换成一个int值。获取内存地址的int值后自然可以再将这个地址强制转换成一个int*类型的指针,此时就可以绕开原有的指针直接利用一个int整数来操作内存空间。

测试代码如下:

#include<iostream>
using namespace std;

int main() {
	cout << sizeof(int*) << endl;//4
	cout << sizeof(int) << endl;//4

	int* p = new int;
	*p = 0;
	int address = (int)p;
	cout << p << " " << (int*)address << endl;
	cout << *p << " " << *(int*)address << endl;//0 0
	*(int*)(address + 4) = 1;
	cout << *(p + 1) << endl;//1
	system("pause");
	return 0;
}

 

posted @ 2022-06-12 20:48  熊の熊  阅读(44)  评论(0)    收藏  举报