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