aと&aの違い


 
[cpp] view plaincopyprint?
4.3.2,a  &a      
       ,                  ,        :  
main()  
{  
 int a[5]={1,2,3,4,5};  
 int *ptr=(int *)(&a+1);  
 printf("%d,%d",*(a+1),*(ptr-1));  
}  
  
          ?                   。  
      1   ,            ,           1。  ,  
     T       , sizeof(T)      。  ,     ,a       
   ,    5    ; ptr    int     。  
&a + 1:    a     ,       sizeof(a)   , &a + 5*sizeof(int),   
           ,                。  
(int *)(&a+1):              ,     int *   ,   ptr。  
*(a+1): a,&a       ,      ,a           ,   a[0]   
   ,&a        ,a+1            , a[1]    ,&a+1      
       。    2  
*(ptr-1):   ptr    a[5],  ptr  int *   ,  *(ptr-1)    a[4] ,  
  5。  
             ,      ,           :  
 Visual C++6.0  Watch    &a+1       (x0012ff6d(0x0012ff6c+1) ?  
/* 
   
A                 ,  a+1        
&a[0]             ,                   
&a                        a+1        
*/  
C         -----“      ”。  A[10];  
    ,                              。    ,              。              ,                   :  
 a                 ?  
            ,         。  
a          &a[0]   ,             ,         。     。  
  
    ,      ,       (          ,             )       ,             a           ,             。  
a     ,        ,      ?a       !  
              。                   a         ,                  ,                            。       a[i]   ,    a   。         a           ,               ,                       a    。