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

浙公网安备 33010602011771号