知识点整理:
1、计算机操作系统OS给内存中的每个字节一个连续的地址编号,每个字节拥有一个连续增长的地址编号。
2、在32位操作系统中,一个指针变量占4字节;在64位操作系统中一个指针变量占8字节。
3、32位OS最多可以给2^32个字节编号。
4、指针变量也是变量,存的值为地址。
5、下图为一级指针变量p与变量a的关系:
代码展示:
#includeint main(){ int a=123; int *p=&a; int **q=&p; printf("a=%d &a=%d p=%d &p=%d *p=%d q=%d &q=%d *q=%d **q=%dn",a,&a,p,&p,*p,q,&q,*q,**q); return 0; }
运行结果:
a=123 &a=1339599740 p=1339599740 &p=1339599744 *p=123 q=1339599744 &q=1339599752 *q=1339599740 **q=123
如下例题,用不同的形式表示a[1].x:
#includestruct Node{ int x=100,y=200; }; int main(){ struct Node a[2],*p=a; //用不同的形式表示a[1].x printf("a[1].x=%dn",a[1].x); printf("(*(a+1)).x=%dn",(*(a+1)).x); printf("(*(&a[0]+1)).x=%dn",(*(&a[0]+1)).x); printf("(*(&a[1])).x=%dn",(*(&a[1])).x); printf("(a+1)->x=%dn",(a+1)->x); printf("(&a[0]+1)->x=%dn",(&a[0]+1)->x); printf("(&a[1])->x=%dn",(&a[1])->x); printf("(p+1)->x=%dn",(p+1)->x); printf("(*(p+1)).x=%dn",(*(p+1)).x); printf("(&p[0]+1)->x=%dn",(&p[0]+1)->x); printf("(*(&p[0]+1)).x=%dn",(*(&p[0]+1)).x); printf("p[1].x=%dn",p[1].x); printf("(*(&p[1])).x=%dn",(*(&p[1])).x); printf("(&p[1])->x=%dn",(&p[1])->x); //printf("p[1]->x=%dn",p[1]->x);//有误! //printf("(&a+1)->x=%dn",(&a+1)->x);//有误! //printf("(*(&a+1)).x=%dn",(*(&a+1)).x);//有误! //printf("(*(&p+1)).x=%dn",(*(&p+1)).x);//有误! //printf("(&p+1)->x=%dn",(&p+1)->x);//有误! return 0; }
示例运行结果:
a[1].x=100 (*(a+1)).x=100 (*(&a[0]+1)).x=100 (*(&a[1])).x=100 (a+1)->x=100 (&a[0]+1)->x=100 (&a[1])->x=100 (p+1)->x=100 (*(p+1)).x=100 (&p[0]+1)->x=100 (*(&p[0]+1)).x=100 p[1].x=100 (*(&p[1])).x=100 (&p[1])->x=100



