指针细节整理2

/*指针的细节汇总
     2017年12月15日14:59:34 
*/

#include <stdio.h>

int main(void)
{
    int a[10]={1,2,3,4,5,6};
    int b[20]={1,2,3,4,5,6,7,8};
    int *p = a;//指针变量指向a的地址。
    int * q1 = &b[5];//指针变量指向b[5]的地址。 
    int * q2 = &b[3];//
    printf("--------\n");
    printf("%d\n",q1-q2);//--------2
    printf("%d,%d\n",q1,q2); 
    printf("--------\n"); 
    /*
        表示q1所指的元素和q2所指的元素差2个元素 
    */
     
    printf("%d,%d\n",p,&a);//a的地址

/*    
//注意细节一:
 
    ++p;//代表&a加 int个字节(4)
    printf("%d\n",p);
    /*即p+1:指向同一数组的下一个元素
        p-1:指向同一数组的上一个 元素 
        
        公式:p+1*d(d代表参数类型字节大小) 
    */
//*//


    printf("&a[0]:%d,a:%d,&a[2]:%d,p:%d,p+2:%d,a+2:%d\n",&a[0],a,&a[2],p,p+2,a+2);
    printf("%d,%d,%d\n",*p,*(p+2),a[2])    ;
    /* 
        p的初始值为&a[0],则p+i和a+i就是数组元素a[i]的地址 
            
    */
    
    
    printf("%d,%d",*(p+2),*(a+2)); 
    /*
        *(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即a[i]. 
    */
    
     
    
    return 0; 
 } 
 
 /*
    若a的首元素的地址为1000,数组为float类型的
    则a[3]的地址为:1000+3*4 =1012 
 */

 

posted @ 2017-12-16 19:40  Howie_Tang  阅读(166)  评论(0编辑  收藏  举报