數組指針加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\n%d\n",*(a+1),*(ptr-1));
      printf("sizeof(b)=%d\n",sizeof(b));
      printf("sizeof(&b)%d\n",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(類型)的地址值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM