60再谈指针
Posted 随意就好欧巴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了60再谈指针相关的知识,希望对你有一定的参考价值。
32位操作系统下:一个应用程序理论上的虚拟内存空间4GB内存
0000 0000 0000 0000 0000 0000 0000 0000 - 1111 1111 1111 1111 1111 1111 1111 1111
0x0000 0000 - 0xFFFF FFFF
指针的本质就是一个int类型的变量.
只不过这个变量是存放一个4字节的内存地址,并且这个int是无符号的类型,因为内存地址不存在负数.
我们平常定义的
char * l_v1
double * l_v2
int * l_v3
只是在用这个指针的时候,在内存移动一个多大的距离.
0000 0000 0000 0000 0000 0000 0000 0000 - 1111 1111 1111 1111 1111 1111 1111 1111
0x0000 0000 - 0xFFFF FFFF
指针的本质就是一个int类型的变量.
只不过这个变量是存放一个4字节的内存地址,并且这个int是无符号的类型,因为内存地址不存在负数.
我们平常定义的
char * l_v1
double * l_v2
int * l_v3
只是在用这个指针的时候,在内存移动一个多大的距离.
l_v1 = 0x
12345678
64位操作系统下:一个应用程序的虚拟内存是2的64次方内存空间.当然这只是理论.
所以指针就是8个字节的无符号整数了.
0x0000 0000 0000 0000 - 0x FFFF FFFF FFFF FFFFF
int l_v1 = 100;
int *l_v2 = &l_v1;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
64位操作系统下:一个应用程序的虚拟内存是2的64次方内存空间.当然这只是理论.
所以指针就是8个字节的无符号整数了.
0x0000 0000 0000 0000 - 0x FFFF FFFF FFFF FFFFF
int l_v1 = 100;
int *l_v2 = &l_v1;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main() {
char l_v1[100] = "ABCDEFGHIGKLMN";
char * l_v2 = &l_v1;
int *l_v3 = &l_v1;
int *l_v3 = &l_v1;
printf("%c\n", *l_v2);
printf("%c\n", *l_v3);
printf("%c\n", *l_v3);
l_v2++;
l_v3++;
l_v3++;
printf("%c\n", *l_v2);
printf("%c\n", *l_v3);
printf("%c\n", *l_v3);
system("pause");
}
}
int l_v1 = 0;
const int *l_v2 = &l_v1;
//常量指针
__asm {
mov eax, dword ptr[ebp - 14h];
mov dword
ptr[eax], 64h;
}
printf("l_v1 is %d \n", l_v1);
//
指针可以指向一个int类型的地址,但不可以用*l_v3修改这个内存的值.
// mov eax,dword ptr [ebp-14h]
// mov dword ptr[eax], 64h
// mov dword ptr[ebp - 8h],
64h;
const int l_v1 = 0;
这只是一些语法限制,编译器不允许我们这么做.
不过如果想要绕过去,有时候可以通过指针或者内嵌汇编的方式.
跟外挂和黑客很相似. //都是跟内存打交道.
以上是关于60再谈指针的主要内容,如果未能解决你的问题,请参考以下文章
(60) 结构体指针结构体变量嵌套结构体指针嵌套函数指针数组指针指针数组typedef 综合运用
css 60fps指针事件 - http://www.thecssninja.com/css/pointer-events-60fps