zoukankan      html  css  js  c++  java
  • 指针

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

    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 }

    运行结果如图

     

  • 相关阅读:
    使用gRPC搭建Server端与Client端
    Protocol Buffers 介绍
    测试指标
    linux命令 host-常用的分析域名查询工具
    hping3
    linux命令 iperf-网络性能测试工具
    linux命令 dig-域名查询工具
    linux arping-通过发送ARP协议报文测试网络
    linux nslookup-查询域名DNS信息的工具
    linux netstat-查看Linux中网络系统状态信息
  • 原文地址:https://www.cnblogs.com/zimudao/p/9112356.html
Copyright © 2011-2022 走看看