數組的首地址和數組元素的首地址區別


#include<stdio.h> 
   void main () 
 { 
         int arr[5]={1,2,3,4,5};
         int *p1; 
         int (*p2)[5];
         p1=arr;
         p2=&arr; 
         printf("%d\n",*p1);
         printf("%d\n",*(int *)p2);
         printf("%d\n",*(p1+1));
         printf("%d\n",*(int *)(p2+1)); 
 }

 

1、輸出的*p1很好理解,它即是a[0]元素;
2、printf(“%d\n”,(int )p2);
p2=&a 是取數組a的首地址賦給p2,因為p2是int(*)[5]類型的
輸出的是講p2強制轉換成(int *)后,從所指字節開始的一個整數;也就是數組a的第1個元素a[0]的值
3、*(p1+1)是向后移動一個元素即是a[1];
4、printf(“%d\n”,(int )(p2+1));
由於p2是指向具有10個整型元素數組的指針,所以p2+1所指向的下一個元素,所以p2+1所指的下一個元素,就是跳過這10個元素的下10個元素的位置,即是數組a的最后一個元素a[4]之后的下一個存儲單元。實際上P2的值增加了20

數組a的首元素a[0]和數組a的首地址都是指一個存儲單元,所以它們的地址一定是同一個地址,單從概念上來講,它們完全不同,a代表數組首元素的地址,而&a是數組的首地址。


免責聲明!

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



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