C++ 引用

2 引用

2.1 引用的基本使用

作用:给变量起别名

语法: 数据类型 &别名 = 原名

示例:

#include <iostream> using namespace std;   int main() {  	// 引用基本语法 	// 数据类型 &别名 = 原名  	int a = 10; 	// 创建引用 	int& b = a;  	cout << "a = " << a << endl; 	cout << "b = " << b << endl;  	b = 100;  	cout << "a = " << a << endl; 	cout << "b = " << b << endl;  	system("pause");  	return 0; } 

2.2 引用注意事项

  • 引用必须初始化
  • 引用在初始化后,不可以改变

示例:

#include <iostream> using namespace std;  int main() {  	int a = 10; 	  	// 1、引用必须初始化 	// int& b; // 错误,必须初始化 	int &b = a;  	// 2、引用在初始化后,不可以修改 	int c = 20;  	b = c; // 赋值操作,而不是更改引用   	cout << "a = " << a << endl; 	cout << "b = " << b << endl; 	cout << "c = " << c << endl;  	system("pause");  	return 0; } 

2.3 引用做函数参数

作用:函数传参时,可以利用引用的技术让形参修饰实参

优点:可以简化指针修改实参

示例:

#include <iostream> using namespace std;  // 交换函数  // 1、值传递 void mySwap01(int a, int b) { 	int temp = a; 	a = b; 	b = temp;  	//cout << "swap01 a = " << a << endl; 	//cout << "swap01 b = " << b << endl; }  // 2、地址传递 void mySwap02(int* a, int* b) { 	int temp = *a; 	*a = *b; 	*b = temp;  	//cout << "swap02 a = " << *a << endl; 	//cout << "swap02 b = " << *b << endl; }  // 3、引用传递 void mySwap03(int& a, int& b) { 	int temp = a; 	a = b; 	b = temp; }  int main() { 	 	int a = 10; 	int b = 20;  	// mySwap01(a, b); // 值传递,形参不会修饰实参 	// mySwap02(&a, &b); // 地址传递,形参会修饰实参  	mySwap03(a, b); // 引用传递,形参会修饰实参   	cout << "a = " << a << endl; 	cout << "b = " << b << endl;   	system("pause");  	return 0; } 

总结:通过引用参数产生的效果同按地址传递是一样的。引用的语法更清楚简单

2.4 引用做函数返回值

作用:引用是可以作为函数的返回值存在的

注意:不要返回局部变量引用

用法:函数调用作为左值

示例:

#include <iostream> using namespace std;   // 引用做函数的返回值  // 1、不要返回局部变量的引用 int & test01() { 	int a = 10; // 局部变量存放在四区中的 栈区 	 	return a;  }  // 2、函数的调用可以作为左值 int& test02() { 	static int a = 10; // 静态变量,存放在全局区,全局区上的数据在程序结束后系统释放掉 	return a; }  int main() { 	//int & ref = test01();  	//cout << " ref = " << ref << endl; // (X86)第一次结果正确,是因为编译器做了保留 	//cout << " ref = " << ref << endl; // (X86)第二次结果错误,因为 a 的内存已经释放  	int& ref2 = test02();  	cout << "ref2 = " << ref2 << endl; 	cout << "ref2 = " << ref2 << endl;  	test02() = 1000; // 如果函数的返回值是引用,这个函数调用可以做为左值   	cout << "ref2 = " << ref2 << endl; 	cout << "ref2 = " << ref2 << endl;  	system("pause");  	return 0; } 

2.5 引用的本质

本质:引用的本质在c++内部实现是一个指针常量.

讲解示例:

//发现是引用,转换为 int* const ref = &a; void func(int& ref){ 	ref = 100; // ref是引用,转换为*ref = 100 } int main(){ 	int a = 10;          //自动转换为 int* const ref = &a; 指针常量是指针指向不可改,也说明为什么引用不可更改 	int& ref = a;  	ref = 20; //内部发现ref是引用,自动帮我们转换为: *ref = 20;      	cout << "a:" << a << endl; 	cout << "ref:" << ref << endl;      	func(a); 	return 0; } 

结论:C++推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了

2.6 常量引用

作用:常量引用主要用来修饰形参,防止误操作

在函数形参列表中,可以加const修饰形参,防止形参改变实参

示例:

#include <iostream> using namespace std;  // 打印数据函数 void showValue(const int& val) { 	// val = 1000; 	cout << "val = " << val << endl; }  int main() {  	// 常量引用 	// 使用场景:用来修饰形参,防止误操作  	// int a = 10;  	// 加上 const 之后,编译器将代码修改  int temp = 10; const int& ref = temp 	// const int& ref = 10; // 引用必须引一块合法的内存空间 	// ref = 20; // 加入 const 之后变为只读,不可以修改  	int a = 100; 	showValue(a);  	cout << "a = " << a << endl;  	system("pause");  	return 0; } 

推荐这些文章:

C++中控制cout输出的函数——1.setprecision(int n)

setprecision(int n)对之后的cout数字输出生效,将设置输出数字小数精度为n位,对多余的小数位数四舍五入。与fixed搭配使用可在输出数字的小数精度小于n时在小数末尾添加0;
示例代码:
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
double d=1.98765432,s=1.11111111,f=1;

cout<<d<<endl<<s<<endl
<<...

error: invalid operands of types 'int' and '<unresolved overloaded function type>' to binary 'operator<<' cout << a&&b <<endl错误

cout << a&&b <<endl这一行出现了这个错误
查了下是因为运算符优先级的问题,加个()就行了
cout << (a&&b) <<endl

 

...

C++输出小数时的小时保留

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
cout << fixed << setprecision(2)<<a<<endl;
 }

...

一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?(一万以内)

#include<iostream>
using namespace std;
int main()
{

for(int i=1;i<=10000;i++){

for(int j=1;j<=i+100;j++){

if((i+100)==j*j){

for(int k=1;k<=i+168;k++){

if(i+168==k*k) cout<<i<<endl; 

}

}

}

}
}

...

C++各种类型大小

#include <iostream>
using namespace std;

int main()
{
system("systeminfo | findstr \"[OS处理器]\"");
cout << "C++ 各种数据长度\n"; // 1
cout << "-----------------------" << endl;
cout << "char \t\t\t" << sizeof(char) << endl; // 1
cout << "unsigned...

2.从一堆数种取出所有众数,输出中间的那个,如果有偶数个众数,输出中间两个的平均值

#include<bits/stdc++.h>
using namespace std;
int num, count1,count2,sum;
int temp = 0,temp1 = 0;
int a[100],b[100];
int* p;
void fun(int b[]) {
for (int i = 0; i < 100; i++) {
b[i] = 0;
}

}
vector<int>vec;
vector<int>::iterator it;
int main() {
while...

C++传递参数的方式有哪几种

一个函数的基本结构是:返回值类型 函数名(形式参数){函数体}尤其是形式参数,返回值一般只有一个,但是形参可能有多个甚至多种形式。总的来说,参数传递有两种方法,一种是直接传值,一种是传地址。其中,传地址又分为传指针、传引用类型、传数组名三种,也就是说参数传递有四种方法。
传值方式
传值方式算是比较常见的方法,简单直观,但是缺点也很明显,通过一个例子就可以看出来

#include <iostream>
using namespace std;
void swap(int a,int b){
int temp;
temp = a;
a = b;
b = temp;
}

i...

C++中控制cout输出的函数——2.setw(int n)

简介
setw(int n)包含在<iomanip>头文件里,对紧随其后的cout输出生效,使用它将设置域宽为n位(即输出数据的宽度)。如果输出数据长度小于域宽,则数据默认右对齐,在长度不足的地方填充空格,可配合setfill(char c)使用,使用setfill(char c)时将设置默认填充字符为传入的参数c。
示例代码
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
int i=1024;
cout<<i<<e...

C++练习6 不同参数的传递方式

当函数的形参是变量时,函数内的操作是只对形参的操作,并不会对实参造成影响
当函数的形参是引用时,在函数内对形参操作的同时也会对实参造成影响

1 #include <iostream>
2 using namespace std;
3 void SwapValue(int a, int b)//在主函数之前设置自定义函数,形参是变量时的传递值
4 {
5 int tmp;//定义变量 tmp 用于a,b值交换
6 tmp = a;
7 a = b;
8 b = tmp;
9 cout << "在SwapValu...

C++ 指针 * 和 引用 &

指针
先看一个简单的例子:

#include <iostream>
using namespace std;

int main() {
// your code goes here
int num = 123;
int* p = &num;
cout<<"p:"<<p<<endl;
cout<<"*p:"<<*p<<endl;
cout<<"num:"<<num<<endl;
cout<<"&a...

文章标题:C++ 引用
文章链接:https://www.dianjilingqu.com/2834.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>