指针与指针的指针有本质上的区别吗
区别呀,我们看例子说吧:
a)、int *p;
b)、int **p;
1、指针的本质
分析:
所谓的数据类型就是具有某种数据特征的东东,比如数据类型char,它的数据特征就是它所占据的内存为1个字节, 指针也很类似,指针所指向的值也占据着内存中的一块地址,地址的长度与指针的类型有关,比如对于char型指针,这个指针占据的内存就是1个字节,因此指针也是一种数据类型,但我们知道指针本身也占据了一个内存空间地址,地址的长度和机器的字长有关,比如在32位机器中,这个长度就是4个字节,因此"指针本身也同样是一种数据类型",因此,我们说,指针其实是一种复合的数据类型,
好了,现在我们可以分析上面的几个例子了。
假设有如下定义:
int nValue;
那么,nValue的类型就是int,也就是把nValue这个具体变量去掉后剩余的部分,因此,上面的4个声明可以类比进行分析:
a)、int *
*代表变量(指针本身)的值是一个地址,int代表这个地址里面存放的是一个整数,这两个结合起来,int *定义了一个指向整数的指针,类推如下:
b)、int **
指向一个指向整数的指针的指针。
2、对指针所指向物的分析
现在再对指针这个复合类型的第二部分,指针所指向物的意义进行分析。
上面我们已经得到了指针本身的类型,那么将指针本身的类型去掉 “*”号就可得到指针所指向物的类型,分别如下:
a)、int
所指向物是一个整数。
b)、int*
所指向物是一个指向整数的指针。
头指针:
头指针是指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针
头指针具有标识作用,所以头指针冠以链表的名字(指针变量的名字)
无论链表是否为空,头指针均不为空
头指针是链表的必要元素
头结点:
--头结点是为了操作的统一和方便而设立的,放在第一个元素的结点之前,其数据域一般无意义(但也可以用来存放链表的长度)
--有了头结点,对在第一元素结点前插入结点和删除第一结点起操作与其它结点的操作就统一了
--头结点不一定是链表的必要元素
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!