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

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,作者:,版权归原作者所有,如需转载,请联系作者。

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

(完)