/*指针的细节汇总 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 */