指针

首先指针就是一个变量,这个变量中的内容存放的是内存中某个东西的地址。

1 int arr[]={1,2,3};
2 int *p=&arr[0];   //或者 int *p=arr

此时在内存中,应该是这样存储的。

0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00

其实int *p这样写,不如int* p更好理解。有一个变量类型是int*,变量名为p。

在c/c++中,只要带*的变量在内存中统一占用4个字节(32位系统中)。因为带*便是地址,而32位系统的内存最大是4gb,就是0x00000000~0xFFFFFFFF。

对于p这个变量,可以把它当作一个数组来用

1 cout<<p[0];

实际上也就是

1 cout<<*(p+i); //此处的i每增加1,相当于内存往后移动int*这个变量去掉*的类型长度

另外如果我们希望通过其他类型来寻找某些数据的时候。

例如:希望找到某片内存中是0x929080f8所在的地方,内存中数据如下。

0xc0,0xf9,0x82,0xf8,0x80,0x90,0x92,0x82,0x92,0xa4,
0xb0,0x99,0xc0,0xf9,0xa4,0x92,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90,0x92,0x82,0xf8,0x80,0xf9,0x92,0x82,
0xf9,0x82,0xf8,0x80,0x90,0xf8,0x80,0x90,0x92,0x90

我们可以这样。

 1 #include<iostream>
 2 using namespace std;
 3 char date[40]=
 4 {
 5     0xc0,0xf9,0x82,0xf8,0x80,0x90,0x92,0x82,0x92,0xa4,
 6     0xb0,0x99,0xc0,0xf9,0xa4,0x92,0xb0,0x99,0x92,0x82,
 7     0xf8,0x80,0x90,0x92,0x82,0xf8,0x80,0xf9,0x92,0x82,
 8     0xf9,0x82,0xf8,0x80,0x90,0xf8,0x80,0x90,0x92,0x90
 9 };
10 void main()
11 {
12     int* p=NULL;
13     for(int i=0;i<40;i++)
14     {
15         p=(int*)&date[i];
16         if(*(p)==0x929080f8)
17         {
18             cout<<i<<endl;
19             cout<<p<<endl;
20         }
21     }
22     
23 }

运行结果如图

 

 

posted @ 2018-05-30 17:51  newen  阅读(123)  评论(0编辑  收藏  举报