《C和指针》学习笔记七/链表 高级指针/

本文介绍了链表的基本概念,包括单链表和双链表的结构及其遍历方式。此外,还深入探讨了C语言中的高级指针声明,如函数指针和指针数组的使用,强调了消除冗余语句的编程技巧。
摘要由CSDN通过智能技术生成

链表就一些包含数据的独立数据结构(通常称为节点)的集合。

在单链表中,每个节点包含一个指向链表下一节点的指针。链表最后一个节点的指针字段的值为NULL,提示链表后面不再有其他节点。在你找到链表的第1个节点后,指针就可以带你访问剩余的所有的节点。为了记住链表的起始位置,可以使用一个根指针。根指针指向链表的第1个节点。注意根指针只是一个指针,它不包含任何数据。


在一个双链表中,每个节点都包含两个指针——指向前一个节点的指针和指向后一个节点的指针。这可以使我们以任何方向遍历双链表,甚至可以忽前忽后地在双链表中访问。它存在两个根指针:一个指向链表的第1个节点,另一个指向最后一个节点。这两个指针允许我们从链表的任何一端开始遍历链表。

语句提炼是一种简化程序的技巧,其方法是消除程序中冗余的语句。

 

高级声明(以下全是旧式风格的声明,目的是为了让例子简单一些)

int *f( );
f是一个函数,它的返回值类型是一个指向整型的指针。

 

int (*f)( );
f成为一个函数指针,它所指向的函数返回一个整型值。

 

int *(*f)( );
它和前一个声明基本相同,f也是一个函数指针,只是所指向的函数的返回值是一个整型指针,必须对其进行

间接访问操作才能得到一个整型值。

 

int f[ ];
这个声明表示f是个整型数组。数组的长度暂时省略,因为我们现在关心的是它的类型,而不是它的长度。

 

int *f[ ]
下标的优先级更高,所以f是一个数组,他的元素类型是指向整型的指针。

 

int f( )[ ]; 非法的
f是一个函数,它的返回值是一个整型数组,这里的圈套在于这个声明是非法的——函数只能返回标量值,不

能返回数组。

 

int f[ ]( );     非法的
f似乎是一个数组,它的元素类型是返回值为整型的函数。这个声明也是非法的,因为数组元素必须具有相同

的长度,但不同的函数显然可能具有不同的长度。

 

int (*f[ ])( );
这个声明是合法的。这里有两对括号,它们分别具有不同的含义。括号内的表达式*f[ ]首先进行求值,所以

f是一个元素为某种类型的指针的数组。表达式末尾的()是函数调用操作符,所以f肯定是一个数组,数组元

素的类型是函数指针,它所指向的函数的返回值是一个整型值。

 

int *(*f[ ])( );
这个声明创建了一个指针数组,指针所指向的类型是返回值为整型指针的函数。


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值