指针(下)

前面我们已经知道了指针是用来存储变量地址的变量。我们也可以定义另外的一个指针,用来存储某一个指针的地址,也就是指针的指针。定义指针的指针同定义单纯指针的方法很类似,只要在原有的星号前再多加上一个星号就可以,比如int **pointer.在这里首先我们要搞清楚一个关系:变量中存储的是某一个数据,指针当中存储的是变量的地址,而指针的指针存储的是指针的地址,当有如下定义时:
                       int var=2;
                       int *pointer;
                       int **ptr_to_ptr;
那么:
pointer=&var,  *pointer=var=2,  *ptr_to_ptr=&pointer,  **ptr_to_ptr=pointer=&var;

每学习一样新内容的时候,我们都要问问这项新技能可以帮助我们做些什么,指针的指针也不例外。这便引出了另外一个概念,也就是指针数组。从字面意思看,指针数组就是存储了一组地址连续的指针的数组。那么指针数组又是做什么的?有些时候我们需要处理比较大量的字符串,当对字符串进行处理的时候,计算机是很难识别每个字符串之间的相互关系的,假如程序存在大量字符串的移动,那将会更大程度的造成混乱。所以我们把每一句字符串的第一个字母的地址都存放在一个指针里,当系统对字符串进行调用或者排序的时候,只要移动相应的指针就可以,不需要执行大规模的字符串,这很大程度上提高了程序的效率。而每个存储字符串首地址的指针又都存储在一段相互连续的内存地址中,也就组成了一个指针数组,指向这个数组首地址的指针,便是指针的指针。

在程序中对于数组的调用是一件棘手的问题,指针的使用则解决了这个难题,我们可以提前定义一个指向数组首地址的指针,因为数组元素是连续存放的,所以找到首地址有助于进一步找到其他元素。当数组被调用时,只需调用指针而不需要调用整个数组,事实上,对于函数来说,也不具备调用整个数组的功能,这就使得指针在数组同程序和函数之间起到了一个桥梁作用,而且即使在一些可以直接调用或更改数组出现顺序的环境下,单纯的调用指针也要比调用或移动整个数组容易得多,这在相当程度上提高了程序的效率。

对于一个数组a[],我们知道a可以表示指向该数组的指针,我们同样也可以用a[]来表示指向二维数组a[][]的指针,于是我们得出以下结论:
——数组名后带n对方括号时,为数组的数据;
——数组名后带的方括号少于n对时,为一个指向数组元素的指针。
这并不难理解,不过还是给出一个简单的例子来说明一下:
#include <stdio.h>
int multi[2][4]
int main(void)
{
    printf(”/nmulti = %u”,multi);
    printf(”/nmulti = %u”,multi[0]);
    printf(”/nmulti = %u”,&multi[0][0]);
  }
这个例子很好的说明了多维数组间的关系,当然因为硬件环境的不同,每个人的结果都会不尽相同,但输出的三个值都是一样的。
n维数组的元素是n-1维数组,当n为1时,则元素为数组声明的开头指定的类型的变量。但有一点,用数组名虽然可以表示指向数组的指针,但由于数组名是指针常量,无法修改,所以我们要声明一个真正的指针来指向数组的首地址,假如有二维数组  
                              int multi[2][4];
要声明一个名为ptr,且能够指向multi数组的元素(即能够指向包含4个int变量的数组)的指针,可以这样做:
                              int(*ptr)[4];
之所以给*ptr加上圆括号,因为方括号优先级高于星号,如果这样编写代码
                              int*ptr[4];
则声明的是一个数组,该数组包含4个int指针。
 
最后我们看看指向函数的指针。                 

购物商城项目采用PHP+mysql有以及html+css jq以及layer.js datatables bootstorap等插件等开发,采用了MVC模式,建立一个完善的电商系统,通过不同用户的不同需求,进行相应的调配和处理,提高对购买用户进行配置….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值