c\c++指针如何直接读取某个内存地址的数据
比如直接读取0x00327C5F地址中的数据,并输出
或直接往一个内存地址中写入数据
比如直接往0x0052F3E40地址写入0x55
char * p = 0x00327C5F;
*p = 你的值
即可
前提是这个地址要有效。
指针p指向这个内存地址,*p访问这个内存地址的数据。
下表显示了各种变量类型在内存中存储值时需要占用的内存,以及该类型的变量所能存储的最大值和最小值。
注意:不同系统会有所差异,一字节为 8 位。
注意:long int 8 个字节,int 都是 4 个字节.
早期的 C 编译器定义了 long int 占用 4 个字节,int 占用 2 个字节,新版的 C/C++ 标准兼容了早期的这一设定。
注意:变量的大小会根据编译器和所使用的电脑而有所不同。
使用指针读取或写入某个内存地址的数据,可以按照以下方式实现:
假定要读取地址为0x00327C5F的内存单元中的数据并输出数据,代码如下:
int value;
int *ptr = (int*)0x00327C5F; //定义指针,指向内存地址0x00327C5F对应的位置
value = *ptr; //通过指针来读取内存单元中的数据
printf("The value at memory address 0x00327C5F is: %d\n", value); //输出数据
也可以使用位操作符来读取某个内存地址的数据:
int value;
int *ptr = (int*)0x00327C5F; //定义指针,指向内存地址0x00327C5F对应的位置
unsigned char *bytePtr = (unsigned char*)ptr; //将指针强制转化为指向字节类型的指针
value = bytePtr[0];
value |= bytePtr[1] << 8;
value |= bytePtr[2] << 16;
value |= bytePtr[3] << 24; //通过位运算将若干个字节链接成一个整型数据
printf("The value at memory address 0x00327C5F is: %d\n", value); //输出数据
如果需要将数据写入地址为0x0052F3E40的内存单元,可以按照以下方式实现:
int value = 42;
int *ptr = (int*)0x0052F3E40; //定义指针,指向内存地址0x0052F3E40对应的位置
*ptr = value; //通过指针将数据写入内存单元中
同样也可以使用位操作符将一个整型数据写入某个内存地址中:
int value = 42;
int *ptr = (int*)0x0052F3E40; //定义指针,指向内存地址0x0052F3E40对应的位置
unsigned char *bytePtr = (unsigned char*)ptr; //将指针强制转化为指向字节类型的指针
bytePtr[0] = value & 0xFF;
bytePtr[1] = (value >> 8) & 0xFF;
bytePtr[2] = (value >> 16) & 0xFF;
bytePtr[3] = (value >> 24) & 0xFF; //通过位运算将一个整型数据拆分成若干个字节,并依次写入内存地址中