复习C++(十五)函数②参数、函数和数组

一、函数传递参数方式

被调用时,该函数将创建一个新的变量,因此,被调用的函数使用的是变量的副本而不是原来的数据。用于接受传递值的变量被称为形参,传递给函数的值被称为实参。C++用参数来表示实参,用参量表示形参。参数是函数私有的,函数被调用时,计算机为这些变量分配内存;函数结束时,计算机将释放这些变量使用的内存。

函数可以有多个参数,用逗号隔开即可。

二、函数和数组

将数组作为参数意味着将数组的位置(地址)、包含的元素种类(类型)以及元素数目提交给函数,并不传递数组的内容。所以,传递常规变量时,函数使用该变量的拷贝,传递数组时,函数将用原来的数组。为保护原数据,如果函数不包括对数组的修改,在写参数表时,可以将例如double ar[ ]写成const double ar[ ]。

三、常指针和指针常量

1.指向常量的指针

int age=10;
const int* pt=&age;

不能通过pt修改,比如

*pt+=1;
cin>>*pt;

这样是不被允许的。
但这不代表它指向的值就是一个常量,只是对于pt来说它是常量。比如上面的例子,age并不是常量,可以通过age变量来修改它的值。

可以将常规变量的地址赋给常规指针,将常规变量的地址赋给const指针,将const变量的地址赋给const指针,但不能将const变量的地址赋给常规指针。

const float m=1.22;
float* pm=&m;

这样是不被允许的,因为既然m是常量,它就不能被改变,但由于指针pm不是const的,所以可以改变*pm,这是矛盾的。但是当指针指向指针,即两层或以上关系,不可以将非const地址或指针赋给const指针。
这也说明,禁止将常量数组的数组名作为参数传递给使用非常量形参的函数。

所以,在声明指针参数时,应该尽可能声明为指向常量数据的指针
因为第一,这可以避免无意间修改数据导致的编程错误,第二,使得函数能够处理const和非const实参(两层以上的指针则不能使用这种技术)。

int age=20;
const int* pt=&age;

虽然上述代码中,防止了通过pt修改pt指向的值,但可以修改pt的值。
下面的代码则不能修改pt的值。

int a=3;
int * const f=&a;

这使得f只能指向a,即f的值不能修改,但这种声明允许通过f修改a的值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值