指针家族

    指针有一级指针、二级指针、三家指针......很多人初学者都觉得指针太难了,太抽象了,不好理解。那么我们来想一想,指针的实质是什么呢?是地址,把一块空间A的地址放在另一块空间p里边,*p就可以得到A的地址,如果A里放的是整形,int *p=&A,那么p就是一个指针变量,int *就是该变量的类型。int *p就是一个一级指针。如果将p的地址存放在空间pp中,则int **pp=&p,其中pp就是一个二级指针,因为它的空间中存放着一级指针p的地址。pp的类型是int **。
    很多人都把指针和数组分不清,其实他们有很大的差别,数组的数组名表示该数组首元素地址,指针的实质也是地址,可能因为他们都是地址的缘故,所以才有人分不清。对数取地址拿到的是整个数组的地址(也就是数组指针),如果我们打印出来比较的话它和数组首元素地址并无差别,但他们具有的能力不同,如果对其进行运算的话,(比如对其加一,你会发现数组的地址一次性跳过整个数组,而数组首元素地址一次只跳过一个元素)你会发现他们的步长并不相同。
    还有一种指针的类型叫做指针数组,这种指针我们并不常见,从其名字来看,它的本质是数组,那么它跟指针又有什么关系呢?虽然指针数组是数组,但它里边存储的元素是指针。简单来说,指针数组就是将同一类型的指针存放在一个数组中,这个数组就叫指针数组(比如一个叫arr的数组,其中有若干个元素,每个元素的类型都int *,所以arr就是一个整形指针数组)。

猜你喜欢

转载自blog.csdn.net/qq_42468086/article/details/85019899