各类形参(引用,const,指针)
#include <stdlib.h>
#include <iostream> //这是一个关于引用形参,const形参,指针形参的程序,用于理解不同形式的区别
using namespace std; //非引用形参:是“实参”的一个拷贝副本,修改“形参”不影响“实参”
//const常量:值不可修改
//非引用非const形参和非引用const形参均可由const或非const实参初始化
int use_ptr1(int val)//非引用非const形参
{
return ++val; //可以修改
} int use_ptr2(const int val) //非引用const形参
{
return val; //不可修改
} //指针形参
int use_ptr3(int *s1) //指针形参指向非const对象
{ //只能由指向非const对象的实参指针初始化
return ++(*s1); //可以修改
}
int use_ptr4(const int *s2) //“指向const对象的指针”作为形参
{ //可以由“指向const和非const对象的实参指针”初始化(whl啥意思)
return *s2; //不可修改
} /*********************************/
//以“引用”作为“形参”:直接关联到绑定对象,对“形参”的修改就是对“实参”的修改
int use_ptr5(int &val) //非const引用形参
{ //只能与完全同类型的非const对象关联
return ++val; //不允许传递右值或需要类型转换的对象
}
int use_ptr6(const int &val) //const引用形参
{ //可以由非const或const对象初始化
return val; //也可以传递右值或需要类型转换的对象
} //传递指针的引用
void ptrswap1(int *&s1,int *&s2) //指向非const对象的指针的引用
{
//形参定义的理解:int *&a->a是一个引用,与指向int型对象的指针相关联。也就是说,a是传递进函数swap的任意指针的别名
//使用“指向非const对象的指针”初始化
int *temp = s2;
s2 = s1;
s1 = temp;
} void ptrswap2(const int *&s1,const int *&s2) //“指向const对象的指针”的引用
{
//形参定义的理解:const int *&a->a是一个引用,与指向int型const对象的指针相关联。
//使用指向const对象的指针初始化
const int *temp = s2;
s2 = s1;
s1 = temp;
} /*********************************/
int main()
{
int v1 = ;
const int v2 = ;
short v3 = ;
cout << v1 << " " << v2 << endl; use_ptr1(v1);
use_ptr1(v2);
cout << v1 << " " << v2 << endl; use_ptr2(v1);
use_ptr2(v2);
cout << v1 << " " << v2 << endl; use_ptr3(&v1);
//use_ptr3(&v2); //error:不能使用指向const对象的指针来初始化指向非const对象的指针
cout << v1 << " " << v2 << endl; use_ptr4(&v1);
use_ptr4(&v2);
cout << v1 << " " << v2 << endl; use_ptr5(v1);
//use_ptr5(v2); //error:不能使用const对象指初始化非const引用形参
//use_ptr5(v3); //error;不能使用不同类型的对象来初始化形参
//use_ptr5(0); //error:不能使用右值来初始化
//use_ptr5(v1+v2); //error: 不能使用右值来初始化 use_ptr6(v1);
use_ptr6(v2);
use_ptr6(v3); //OK:类型转换
use_ptr6(); //OK:右值
use_ptr6(v1+v2); //OK:右值 int a = , b = ;
int *p1 = &a;
int *p2 = &b;
const int *p3 = &a;
const int *p4 = &b; ptrswap1(p1, p2);
//ptrswap1(p3, p4); //error:指向const对象的指针
cout << *p1 << " " << *p2 << endl; //ptrswap2(p1, p2); //error:指向非const对象的指针
ptrswap2(p3, p4);
cout << *p1 << " " << *p2 << endl;
system("pause");
return ;
}
各类形参(引用,const,指针)的更多相关文章
- C++的引用与const指针的关系以及各种传递方式
首先我们知道 const int *p 与 int const *p 是一样的,即 *p 是常量:而 int * const p 跟上面是不一样的,即 p 是常量:我们知道引用只是一个别名,与变量共享 ...
- 函数返回值为 const 指针、const 引用
函数返回值为 const 指针,可以使得外部在得到这个指针后,不能修改其指向的内容.返回值为 const 引用同理. class CString { private: char* str; publi ...
- 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用
[源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, con ...
- 【c++基础】const、const指针、const引用
一.const常量 声明时必须同时初始化(和“引用”一样) 二.const指针 三.const引用 引用本身和引用的对象都是const对象,可以用字面值来赋给const引用(普通引用则不行) ; co ...
- Const指针 、 指向const的指针 、引用、指针
1. const指针和 指向const的指针 指向const的指针: 不允许通过指针来改变其指向的const值 const double *cptr *cptr = 42; // error! 指针 ...
- C++ 中的 const、引用和指针的深入分析
1,关于 const 的疑问: 1,const 什么时候为只读变量,什么时候是常量: 1,const 从 C 到 C++ 进化的过程中得到了升级,const 在 C++ 中不仅仅像在 C 中声明一个只 ...
- const、引用与指针
前提 我们忽略掉了相同类型是否可以赋值的情况(我到现在的学习里都还可以相互赋值),以及类型兼容的情况.只考虑const.&.*等修饰符带来的影响 类型兼容: 强制类型转换 基类与子类间的兼容 ...
- C、C++中引用与指针的区别
1:引用的和指针在概念上的区别 引用是变量的别名,例如 int m; int &n=m; 引用作为一个别名.它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用 ...
- 浅谈C/C++引用和指针的联系和区别
为什么C/C++语言使用指针? 答案:①一方面,每一种编程语言都使用指针.不止C/C++使用指针. 每一种编程语言都使用指针.C++将指针暴露给了用户(程序员),而Java和C#等语言则将指针隐藏起来 ...
随机推荐
- Android 微信分享信息
随着微信越来越火,越来越多的应用要求有分享到微信的功能.虽然有很多平台都帮集成有分享功能,比如友盟.但是个人觉得友盟集成的东西太多了,自己封装得太过分了,很多资源文件也要带进去,所以感觉不是怎么好,所 ...
- ab压力测试报错: apr_socket_recv: Connection reset by peer (104)
使用ab对网站进行压力测试,开始设置并发500,可以正常使用,当设置并发为1000,则报错: apr_socket_recv: Connection reset by peer (104) 改服务端a ...
- C++ 文件的复制、删除、重命名
一.文件的复制 #include <iostream>#include <fstream>using namespace std; int CopyFile(char *Sou ...
- Final Exam Arrangement(ZOJ)
In Zhejiang University, there are N different courses labeled from 1 to N. Each course has its own t ...
- jQuery-瀑布流 布局 (处理页面滚动和AJAX加载延迟问题)
瀑布流:这种布局适合于小数据块,每个数据块内容相近且没有侧重.通常,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部. 一.功能分析: 1.判断图片是否进入可视区域: 2.用AJAX ...
- sctf pwn200
题目给出了pwn200和libc.so.使用IDA查看程序,发现逻辑很简单. 使用checksec查看pwn200的安全属性,如下图: 发现NX enabled,No PIE. 在第一次读(0x080 ...
- 分享:一个基于NPOI的excel导入导出组件(强类型)
一.引子 新进公司被安排处理系统的数据报表任务——对学生的考试成绩进行统计并能导出到excel.虽然以前也有弄过,但感觉不是很好,所以这次狠下心,多花点时间作个让自己满意的插件. 二.适用领域 因为需 ...
- js——BOM
BOM:Browser Object Model 浏览器对象模型 open(页面的地址url,打开的方式) :方法 打开一个新的窗口(页面) 如果url为空,折磨人打开一个空白页面 如果打开方式为 ...
- js call方法介绍
call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, [,.argN ...
- C/C++中的far和near两个指针
Dos 的设计是基于16位的CPU的,也就是CPU中的每个寄存器(Register)只有16位,只能存放0-65535(64K)的值.为了能访问大于64K的内存,人们用了分段的方法,用两个16位的数来 ...