zoukankan      html  css  js  c++  java
  • c指针类型的作用

    指针类型的作用

    • 任何类型的指针占用的空间大小都是相同的(32位CPU是4字节;64位CPU是8字节)
    • 既然任何类型的指针占用的空间大小都是相同的,为什么指针还需要类型呢?指针只是指向了一个内存地址,但是当存内存中取值的时候,系统不知道你要从当前指针指向的地址,取几个字节,指定了指针的类型后,系统就知道取几个字节了。char类型取1个字节,short类型取2个字节,int类型去4个字节。
    #include <stdio.h>
    
    int main(){
      int i = 123456789;//i的值用16进制表示就是:0x075bcd15
      char *c = (char*)&i;
      printf("char:%d
    ", *c);//打印出21,因为是char类型的指针,所以去1个字节,也就是去的是16进制的15,十进制就是21.
      short *s = (short*)&i;
      printf("short:%d
    ", *s);//打印出-13035,因为是char类型的指针,所以去2个字节也就是去的是16进制的cd15,十进制就是-13035
      int *pi = &i;
      printf("int:%d
    ", *pi);//打印出123456789
    }
    

    (gdb) p/a i

    $4 = 0x75bcd15

    (gdb) p 0x15

    $6 = 21

    (gdb) p/a -13035

    $3 = 0xffffffffffffcd15

    • 指针的加减法运算,也是和指针类型绑定的。对一个没有类型的指针做加1,系统是不知道移动几个字节的,所以必须有类型。int类型的指针值加1后,指针移动4个字节,char类型的指针值加1后,指针移动1个字节,double类型的指针值加1后,指针移动8个字节。下面的例子虽然是同一个地址加1,但是得到的地址完全不同。
    #include <stdio.h>
    
    int main(){
      int *p = (int*)0x7fffffffe1e4;
      printf("int p=%p, p+1=%p
    ", p,p+1);//int p=0x7fffffffe1e4, p+1=0x7fffffffe1e8
      char *c = (char*)p;
      printf("char p=%p, p+1=%p
    ", c,c+1);//char p=0x7fffffffe1e4, p+1=0x7fffffffe1e5  
      short *s = (short*)p;
      printf("short p=%p, p+1=%p
    ", s,s+1);//short p=0x7fffffffe1e4, p+1=0x7fffffffe1e6
      double *d = (double*)p;
      printf("double p=%p, p+1=%p
    ", d,d+1);//double p=0x7fffffffe1e4, p+1=0x7fffffffe1ec
    
      int ar[10] = {0};
      int (*pa)[10] = &ar;
      //pa是10个元素的int数组的指针,所以pa+1后,就移动了40(4*10)个字节
      printf("ar[10] p=%p, p+1=%p
    ", pa,pa+1);//ar[10] p=0x7fffffffe1b0, p+1=0x7fffffffe1d8  
    }
    

    (gdb) p 0xd8-0xb0
    $3 = 40

  • 相关阅读:
    常用电子元器件及应用
    局域网传输-LED灯搭建局域网:数据传输可达每秒3Gb
    硬件设计原理图Checklist 参考案例二 【转载】
    基于LiFi可见光通信技术的研究及应用转化调查
    T&F 圆桌:儿童智能玩具离我们还有多远?
    一座金矿:数千亿规模智能玩具市场
    【Java】+ 图片与base64互转 + 字符串与base64互转
    【Java】+ 【wss】 + WebSocketClient
    【IDEA】+SVN
    【杂项】+事件管理之时间4象限
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9162562.html
Copyright © 2011-2022 走看看