8.2 C++指针变量作函数参数接收数组地址

举报
C语言入门到精通 发表于 2021/02/23 23:19:09 2021/02/23
【摘要】 C++指针变量作函数参数接收数组地址在C++中,用指针变量指向数组元素时要注意: 指针变量p可以指向有效的数组元素,实际上也可以指向数组 以后的内存单元。int arrya[10];//指针变量p的初值为&array[0] *p=array; cout<<*(p+10;//输出arry[10]的值 在使用指针变量指向数组元素时,应切实保证指向 数组中有效的元素指向数组元素的指针...

C++指针变量作函数参数接收数组地址

在C++中,用指针变量指向数组元素时要注意: 指针变量p可以指向有效的数组元素,实际上也可以指向数组 以后的内存单元。

int arrya[10];//指针变量p的初值为&array[0]
*p=array;
cout<<*(p+10;//输出arry[10]的值

在使用指针变量指向数组元素时,应切实保证指向 数组中有效的元素指向数组元素的指针的运算比较灵活。

如果先使p指向数组array的首元素,则:

p++,使p指向下一元素,即array[1],如果用*p,得到下一个元素array[1]的值。

*p++,由于++和*同优先级,结合方向为自右而左,因此它等价于*(p++),作用是:先得到p指向的变量的值,然后再使p的值加1。

for(p=a:p<a+10;p++)
{
  cout<<*p;
}

//等同于

for(p=a;p<a+10;)
{
  cout<<*p++;
}

*(p++)与*(++p)作用不同,前者是先取* p值,然后使p加1,后者是先使p加1,再取* *p,若p的初值为array,输出*(p++)得到array[0]的值,而输出*(++p)则得到array[1]的值。

(*p)++表示p所指向的元素值加1

如果p当前指向array[i],则 *(p--)先对p进行*运算,得到array[i],再使p减1,p指向array[i-1] 。

*(++p)先使p自加1,再作*运算,得到array[i+1]
*(--p)先使p自减1,再作*运算,得到array[i-1]

在C++中,将+和--运算符用于指向数组元素的指针变量十分有效,可以使指针变量自动向前或向后移动,指向下一个或上一个数组元素。

在上一节小林已经讲过:数组名代表数组首元素的地址,用数组名作函数的参数,传递的是数组首元素的地址,同样用指针变量作函数形参, 也可以接收从实参传递来的数组首元素的地址。

在C++实际中,函数调用时并不存在一个占有存储空间的形参数组,只有指针变量。

实参与形参的结合,有以下几种形式:

实参 形参
数组名 数组名
数组名 指针变量
指针变量 数组名
指针变量 指针变量

实参数组名array代表一个固定的地址,或者说是指针型常量,它的值是无法改变的;而形参数组名是指针变量,并不是一个固定的地址值,它的值是可以改变的。

在函数调用开始时,它接收了实参数组首元素的地址,但在函数执行期间,它可以再被赋值。

8.2 C++指针变量作函数参数接收数组地址 mp.weixin.qq.com图标


文章来源: zhuanlan.zhihu.com,作者:小林C语言,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuanlan.zhihu.com/p/337245080

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。