指针
首先指针就是一个变量,这个变量中的内容存放的是内存中某个东西的地址。
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 }
运行结果如图