c语⾔实现数据写⼊存储地址,c语⾔中通过指针将数值赋值到
制定内存地址
1.⼀种直观的⽅法
假设现在需要往内存0x12ff7c地址上存⼊⼀个整型数0x100。我们怎么才能做到呢?
我们知道可以通过⼀个指针向其指向的内存地址写⼊数据,那么这⾥的内存地址0x12ff7c其本质不就是⼀个指针嘛。所以我们可以⽤下⾯的⽅法:
指针变量本身有地址吗1 int *p = (int *)0x12ff7c;
2 *p = 0x100;
需要注意的是将地址0x12ff7c赋值给指针变量p的时候必须强制转换。
1.1 为什么在此处,我们敢往0x12ff7c这个地址赋值呢?
⾄于这⾥为什么选择内存地址0x12ff7c,⽽不选择别的地址,⽐如0xff00等。这仅仅是为了⽅便在Visual C++ 6.0上测试⽽已。如果你选择0xff00,也许在执⾏*p = 0x100;这条语句的时候,编译器会报告⼀个
内存访问的错误,因为地址0xff00处的内存你可能并没有权⼒去访问。既然这样,我们怎么知道⼀个内存地址是可以合法的被访问呢?也就是说你怎么知道地址0x12ff7c处的内存是可以被访问的呢?其实这很简单,我们可以先定义⼀个变量i,⽐如:
int i = 0;
变量i所处的内存肯定是可以被访问的。然后在编译器的watch窗⼝上观察&i的值不就知道其内存地址了么?这⾥我得到的地址是
0x12ff7c,仅此⽽已(不同的编译器可能每次给变量i分配的内存地址不⼀样,⽽刚好Visual C++ 6.0每次都⼀样)。你完全可以给任意⼀个可以被合法访问的地址赋值。得到这个地址后再把“int i = 0;”这句代码删除。⼀切“罪证”销毁得⼀⼲⼆净,简直是做得天⾐⽆缝。
2.另⼀个⽅法
除了这样就没有别的办法了吗?未必。我们甚⾄可以直接这么写代码:
*(int *)0x12ff7c = 0x100;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论