C语言指针篇
一、int * p
int * p中变量名是p,类型为int*,整型的指针类型。
赋值方式:
int a = 5; int * p; p = &a; printf("p = %d\n",p);//p = 6618646 a的地址 int * r = &a;
可以把存放一个int类型变量的地址赋给一个int * 指针类型的变量。
‘=’左边是一个int * 指针类型的变量 ,可以存放放置着int类型数值的地址。
‘=’右边是&a,a是int类型的变量数值5,&是取地址符,&a就是拿到int类型a的数值的地址。
二、int ** q
int ** q中的变量名是q,类型为int ** 。
int * 中存放的是int类型数据的地址。
int ** 中存放的是int类型数据的地址的地址。
int ** q; q = &p; printf("q = %d\n",q); //q= 6618626 p的地址
指向关系:a<—-p<—-q
三、int *** m
int *** m中变量名是m,类型为
int ***
。int ***中存放的是int类型的地址的地址的地址。
int *** m; m = &q; printf("m = %d\n",m);//m = 6618606 q的地址
四、指针操作
* 操作就是取值操作,即取出指针变量存放的地址中所存放的数据。
分析这种连着好几个*后面跟个变量的表达式,需要从右往左依次抛开
***m; 就是* ( * ( * m ))),看的时候需要从最里层一层一层抛开。 *p; 先看成*(p),再从里向外看,首先他有一个变量p,所有直接可以先从内存中拿到p存放的数据6618636(p中的数据),再找到内存中6618636那片内存,最后取出6618636中的存放数据5(具体数据) ***m = 5; 先看成 *(*( * (m))),再从里向外看 先从内存中拿到m存放的数据6618616(m中的数据),再从内存中找到6618616那片内存,取出存放的数据6618624(*q中存放的数据),完成了 * (m)操作,再从内存中找到6618624那片内存,取出存放的数据6618636 ( *( *(m)) 中存放的数据),完成了 *(* (m))操作,再从内存中找到6618636 那片内存,取出存放的数据5( *(*( *(m))) 中存放的数据),完成了 *(*( *(m)))操作, (几个*查找几层)