Const形参与实参

这篇文章是我看Siki学院学习的笔记,学习的地址如下:

http://www.sikiedu.com/my/course/518

因本人才疏学浅,如有错误之处,还请见谅

Const形参和实参

顶层const:表示任意的对象是常量

底层const:与指针和引用等复合类型有关

对指针而言,顶层const表示指针本身是个常量,而底层const表示指针所指的对象是一个常量。

PS:指针类型,既可以是顶层const也可以是底层const.

基础知识

#include<iostream>
using namespace std;
int main(void) {
	//定义两个int 
	//num1就是普通int num2是int类型的常量
	int num1 = 20;
	const int num2 = 10;
	
	int* p1 = &num1;
	//错误,应为num2是常量,p2不可以修改num2的值
	//int* p2 = &num2;

	//底层的const,可以修改指针p2,p3指向的对象,但是不能
	//通过p2,p3来修改它们指向的对象的值
	const int* p2 = &num1;
	const int* p3 = &num2;
	
	//顶层的const,不可以修改p5指向的对象,但是可以通过
	//p5来修改num1的值
	int* const p5 = &num1;
	//int* const p6 = &num2;

	
	int &r1 = num1;
	//int &r2 = num2;
	//const int类型的引用,不能修改r3,r4的值
	//可以使用int类型和const int类型的初始化
	const int& r3 = num1;
	const int& r4 = num2;
	return 0;
}

在函数里面的应用

① 指针和普通形参

#include<iostream>
using namespace std;
int cube1(int i);
int cube2(const int i);
int pCube1(int* pi);
int pCube2(const int* pi);
int pCube3(int* const pi);
int main(void) {
	int num1 = 20;
	const int num2 = 10;
	//实参是int或者const int都可以
	//因为不管实参是什么,这个函数都只是用了一下它们的值
	//可以修改形参i
	cout << cube1(num1) << " " << cube1(num2) << endl;
	//实参是int或者const int都可以
	//因为不管实参是什么,这个函数都只是用了一下它们的值
	//不可以修改
	cout << cube2(num1) << " " << cube2(num2) << endl;
	//num2会出错,因为*pi可能会修改num2的值,num2又是一个常量
	//会引发冲突.
	cout << pCube1(&num1) << endl;
	cout << pCube2(&num1) <<" "<< pCube2(&num2) << endl;
	cout << pCube3(&num1) << endl;
	return 0;
}
int cube1(int i) {
	i = 0;
	return i * i * i;
}
int cube2(const int i) {
	return i * i * i;
}
int pCube1(int* pi) {
	return *pi * (*pi) * (*pi);
}
//可以修改pi的指向,但是不能通过pi修改pi指向的值
//可以是int也可以是const int
int pCube2(const int* pi) {
	return *pi * (*pi) * (*pi);
}
//不能修改pi的指向,但是可以通过pi修改pi指向的值
//只能是int类型
int pCube3(int* const pi) {
	*pi = 0;	//这是可以的
	//所以不能为const int类型
	return *pi * (*pi) * (*pi);
}

② 引用

#include<iostream>
using namespace std;

int rCube1(int& r);
int rCube2(const  int& r);

int main(void) {
	int num1 = 20;
	const int num2 = 10;
	cout << rCube1(num1) << endl;
	cout << rCube1(num1) << " " << rCube2(num2) << endl;
	return 0;
}
//可以修改r,只能是int类型
int rCube1(int& r) {
	return r * r * r;
}
//不能修改r,int和const类型都可以
int rCube2(const  int& r) {
	return r * r * r;
}

总结

① 指针和引用的话,就看形参能不能改变实参的值.如果可以改变,那么const就不行

② 没有用到指针和引用的话,就要注意不能改变const常量的值,还有变量的作用域和临时变量的存在

③ 具体问题,具体分析

如果这篇文章对你有张帮助的话,可以用你高贵的小手给我点一个免费的赞吗

相信我,你也能变成光.

在这里插入图片描述

如果你有任何建议,或者是发现了我的错误,欢迎评论留言指出.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值