本章小结
1. 指针是C语言中一个重要的构成部门,利用指针编程有以下利益:
(1)提高措施的编译效率和执行速度。
(2)通过指针可利用主调函数和被调函数之间共享变量或数据布局,便于实现双向数据通讯。
(3)可以实现动态的存储分派。
(4)便于暗示各类数据布局,编写高质量的措施。
2. 指针的运算
(1)取地点运算符&:求变量的地点
(2)取内容运算符*:暗示指针所指的变量
(3)赋值运算
·把变量地点赋予指针变量
·同范例指针变量彼此赋值
·把数组,字符串的首地点赋予指针变量
·把函数进口地点赋予指针变量
(4)加减运算
对指向数组,字符串的指针变量可以举办加减运算,如p+n,p-n,p++,p–等。对指向同一数组的两个指针变量可以相减。对指向其它范例的指针变量作加减运算是无意义的。
(5)干系运算
指向同一数组的两个指针变量之间可以举办大于、小于、 便是较量运算。指针可与0较量,p==0暗示p为空指针。
3. 与指针有关的各类说明和意义见下表。
int *p; p为指向整型量的指针变量
int *p[n]; p为指针数组,由n个指向整型量的指针元素构成。
int (*p)[n]; p为指向整型二维数组的指针变量,二维数组的列数为n
int *p() p为返回指针值的函数,该指针指向整型量
int (*p)() p为指向函数的指针,该函数返回整型量
int **p p为一个指向另一指针的指针变量,该指针指向一个整型量。
4. 有关指针的说明许多是由指针,数组,函数说明组合而成的。
但并不是可以任意组合,譬喻数组不能由函数构成,即数组元素不能是一个函数;函数也不能返回一个数组或返回另一个函数。譬喻
int a[5]();就是错误的。
5. 关于括号
在表明组合说明符时, 标识符右边的方括号和圆括号优先于标识符左边的“*”号,而方括号和圆括号以沟通的优先级从左到右团结。但可以用圆括号改变约定的团结顺序。
6. 阅读组合说明符的法则是“从里向外”。
从标识符开始,先看它右边有无方括号或园括号,如有则先作出表明,再看左边有无*号。 假如在任何时候碰着了闭括号,则在继承之前必需用沟通的法则处理惩罚括号内的内容。譬喻:
int*(*(*a)())[10]↑ ↑↑↑↑↑↑
7 6 4 2 1 3 5
上面给出了由内向外的阅读顺序,下面来表明它:
(1)标识符a被说明为;
(2)一个指针变量,它指向;
(3)一个函数,它返回;
(4)一个指针,该指针指向;
(5)一个有10个元素的数组,其范例为;
(6)指针型,它指向;
(7)int型数据。
因此a是一个函数指针变量,该函数返回的一个指针值又指向一个指针数组,该指针数组的元素指向整型量。