- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于指针以及指针形参的一点总结
指针的使用定义:指针:变量的地址称之为指针。这些地址之所以称之为指针是因为他们可以被认为是指向变量的,之所以说是指向变量的是因为可以通过指出变量的地址而不是变量名来获取变量。也就是说指针变量中存储的是该指针指向的变量的地址。使用指针的前置条件:定义或者声明某些指针的时候除非说明指针是指向了某些内容的,否则,指针是没任何意义的,这就是通常所说的野指针。在程序中使用野指针会发生难以预知的错误。指针与赋值操作符一起使用:使用常用的,即内置的赋值操作符就可以将一个指针的值赋值给另一个指针。如:int i = 42;int *first_pt;int *second_pt;first_pt = i;second_pt = first_pt;cout *first_pt endl;cout *second_pt endl;上述first_pt和second_pt都指向了同一块内存地址,即变量i的内存空间地址,也就是说first_pt和second_pt存储的内容是一样的,都是变量i的空间地址;但是first_pt和second_pt分别放在了不同的内存空间地址中。图 1在处理指针变量时,指针变量与其所指的内容(例如*first_pt)有一个主要的区别。不要把一下两个复制语句的含义混淆:second_pt = first_pt;和* second_pt = *first_pt;second_pt = first_pt;的意思是使second_pt指向first_pt已经指向的那个变量。但是在* second_pt = *first_pt;中,由于加入了解引用操作符,该语句的含义就截然不同了,变成了将first_pt所指向的变量的值赋值给second_pt所指向的变量。在下面的示例中,首先声明两个整数以及指向这两个整数的指针:int i = 42;int j = 10;int *first_ptr;int *second_ptr;first_ptr = i;second_ptr = j;cout *first_ptr endl;cout *second_ptr endl;*second_ptr =*first_ptr;cout *first_ptr endl;cout *second_ptr endl;执行红色标注的语句之前,输出的结果为42和10.first_ptr和second_ptr分别是两个不同的指针,指向不同的变量,就是说first_ptr和second_ptr分别存储着整型变量i和j的地址。图 2但是执行红色标注的语句之后,两个指针所指向的变量并没有发生变化,即存储的仍然是整型变量i和j的值,但是second_ptr所指向的变量的值却发生了变化。图 3上述语句中将first_ptr所指向的变量的值42复制到second_ptr所指的对象j中,但是first_ptr和second_ptr各自仍指向原来的变量i和j.指针形参:将指针用作函数的形参,此时将复制实参的值给形参(形参作为实参的一个独立的副本存在)。与其他非引用形参一样,对于形参的改变只局限于局部副本。如果函数给形参赋予新的指针值,主调函数所使用的实参指针值并没有发生改变。事实上被复制的指针只影响对指针的赋值。如果函数的形参是非const类型的指针,那么可以通过修改指针实现赋值从而改变实参所指向的对象的值,这种情况类似于图1的情况。例如:void reset(int *third_ptr){*third_ptr = 0;third_ptr = 0;}int i = 42;first_ptr = i;cout *first_ptr endl;reset(first_ptr);cout *first_ptr endl;示例中,开始输出的是42,经过调用reset函数之后输出的是0.其过程如下:*third_ptr = 0;third_ptr = 0;图 4调用reset(int *third_ptr)之前,first_ptr指向变量i,调用reset(int *third_ptr)之后,由于形参的传递方式是值参数的方式,因此复制first_ptr的值给third_ptr,使二者指向同一个变量,因此通过对所指对象的赋值改变了原来所指的变量的值,但是third_ptr = 0,指向将third_ptr这个局部变量的值改变为0,在函数退出的时候,该指针变量消失。因此可以通过以下函数实现两个变量值的交换:void swap(int *temp1_ptr, int *temp2_ptr){int i = *temp1_ptr;*temp1_ptr = *temp2_ptr;*temp2_ptr = i;}上述函数只是改变了实参所指向的变量的值,但是实参的值(
文档评论(0)