zoukankan      html  css  js  c++  java
  • 数组指针加1的结果

    一般而言,对指针进行加1操作,得到的将是下一个元素的地址,一个类型为T的指针移动,是以sizeof(T)为移动单位。

    #include<stdio.h>
    int main()
    {
          int a[5]={1,2,3,4,5};
          int b[5];
          int *ptr=(int*)(&a+1);             //&a+1的单位是int(*)[5]
          printf("%d
    %d
    ",*(a+1),*(ptr-1));
          printf("sizeof(b)=%d
    ",sizeof(b));
          printf("sizeof(&b)%d
    ",sizeof(&b));
          return 0;
    }
    //程序输出结果:
    //2
    //5
    //sizeof(b)=400  (b数组的大小)
    //sizeof(&b)=8 //64位系统  

    a是数组首地址a[0]的地址,&a是对象(数组)首地址;

    a+1是数组下一个元素的地址,即a[1];

    而&a+1是下一个对象的地址,即a[5]。

    sizeof(b) 是 数组的空间大小,即 5 * 4 = 20;

    sizeof(&b),&b是一个指向int型数据的指针,在64位系统中,指针的大小是8,所以sizeof(&b) = 8

    在C++中,数组的下标并非不可以为负数,当数组的下标为负值时,它表示的意思是从当前地址向前寻址,即为当前地址减去sizeof(类型)的地址值。

  • 相关阅读:
    OD: Kernel Vulnerabilities
    newInstance()和new的区别
    原型模式
    工厂模式
    代理模式
    策略模式
    简单工厂模式
    C#操作符的重载
    旅行之舌尖上的中国
    模式和原则[转载]
  • 原文地址:https://www.cnblogs.com/zzdbullet/p/9392726.html
Copyright © 2011-2022 走看看