C++中的引用,基本语法,注意事项,引用做函数参数,引用做函数返回值,引用的本质,常量引用

基本语法
作用 : 给变量起别名
语法:数据类型 &别名=原名

int a=10;
int &b=a;
b=20;
cout<<a<<endl;

在这里插入图片描述
改b,也相当于a,a,b一起绑定了
看到这个代码的时候的深层理解
把它看成内存
在这里插入图片描述
可不可以让b也代表这块内存,就起个别名。
在C语言中可以用malloc
注意事项

int a=10;
int &b=a;

1.引用必须要初始化,要赋值

int &b;//错误的

2.引用一旦初始化后不可以更改
假如说又有一个变量

int c=20;

一旦b成为了a的别名,就不能再用c的别名了

引用做函数参数
作用:函数传参时,可以利用引用的技术让形参修饰实参
有点:可以简化指针修改实参

#include<iostream>
using namespace std;
//交换函数
//值传递
void swap1(int a,int b){
	int t=a;
	a=b;
	b=t;	
} 
//地址传递
void swap2(int *a,int *b){
	int t=*a;
	*a=*b;
	*b=t;
} 
//引用传递
void swap3(int &a,int &b){//括号里的是起的别名,因为形参,和原来变量一样的别名也可以 
	int t=a;//这个t就是个int型局部变量。
	a=b;
	b=t;
	
} 
//引用与地址传递比较起来更简便一点 
int main(){

int a=10;
int b=20;

swap3(a,b);
cout<<a<<endl;
cout<<b<<endl;

    return 0;
}


在这里插入图片描述
引用做函数返回值
作用
注意:
1.不要返回局部变量的引用 因为局部变量会被编译器释放

#include<iostream>
using namespace std;

int & test(){
	int a=10;//局部变量存放再四区中的栈区 
	return a;	
} 

int main(){

int &r=test();
cout<<r<<endl;
cout<<r<<endl;

    return 0;
}


在这里插入图片描述
这点性质还是栈区的局部变量的性质

2.函数的调用可以作为左值

#include<iostream>
using namespace std;

int & test(){
static int a=10;//静态变量存放在全局区 ,整个程序执行完才会被释放 
	return a;	
} 

int main(){

int &r=test();
cout<<r<<endl;
cout<<r<<endl;
test()=1000;// 因为这个函数返回的是a 
cout<<r<<endl;
cout<<r<<endl; 

    return 0;
}


在这里插入图片描述
引用的本质
本质:引用的本质在C++内部实现是一个指针常量

#include<iostream>
using namespace std;
//发现是引用,转换为int*const ref=&a;
//所以指针的本质就是一个指针常量
//引用一旦初始化后,就不可以发生改变
//但可以改变变量的值 
int fun(int &ref ){
ref =100;
	return ref;	// ref是引用,转换为*ref=100 
} 

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

return 0;
}


所有指针的操作编译器都帮我们做了

常量引用
作用: 常量引用主要用来修饰形参,防止误操作
在函数形参列表中,可以加const修饰形参,防止形参改变实参。

不用const的例子:

#include<iostream>
using namespace std;

void fun(int &ref ){
	 ref=100;
cout<<ref <<endl; 
} 

int main(){
int a=10;
//int &ref=a;
//int &ref=10;这个不对,引用必须引用一块合法的内存空间 
//加上const之后 编译器将代码修改 int temp=10; const int &ref =t; 
const int &ref=10;
//ref=20;错误,加入const之后只读,不可修改 
fun(a);
cout<<a<<endl; 

return 0;
}


在这里插入图片描述
可见误操作,改变了a的值

为了防止误操作


void fun(const int &ref ){
	// ref=100;这行会报错。
cout<<ref <<endl; 
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: c 语言主要包含以下学习内容: 1. 基本数据类型,如整型、浮点型、字符型和布尔型。 2. 操作符,包括算术、关系、位、赋值、逻辑、三目运算符等。 3. 语句,如条件语句(if、else)、循环语句(for、while、do-while)、跳转语句(break、continue、goto)和 return 语句。 4. 函数,包括函数的定义和调用,以及参数传递和返回值。 5. 数组,包括一维数组、二维数组和多维数组的使用。 6. 指针,包括指针的基本概念、指针的定义、使用指针访问数组、使用指针调用函数、以及指针与数组的关系。 7. 结构体,包括结构体的定义、使用和初始化。 8. 输入输出,包括使用 scanf 和 printf 输入输出数据。 9. 预处理器,包括预处理器的宏定义、条件编译和文件包含。 10. 内存管理,包括内存的动态分配和释放。 ### 回答2: C引用的主要学习内容是编程语言C的基本语法和特性。C语言是一种通用的高级编程语言,它被广泛应用于系统开发、嵌入式系统、科学计算等领域。学习C语言需要掌握的主要内容包括以下几个方面: 1. 语法规则:学习C语言需要了解其基本语法规则,如变量的声明和定义、常量的使用、算术运算、控制流语句(如循环和条件判断)、函数的定义和调用等。 2. 数据类型:C语言提供了多种数据类型,包括整型、浮点型、字符型等。学习C语言需要了解各种数据类型的定义和使用方式,以及它们在内存的存储方式和操作。 3. 函数和库:C语言支持函数的定义和调用,可以编写自己的函数来完成特定的任务。此外,C语言还提供了一些标准库函数和头文件,可以直接调用这些函数来完成一些常用的操作,如输入输出、字符串处理等。 4. 指针:指针是C语言的一个重要概念,它允许直接访问和修改内存的数据。学习C语言需要了解指针的基本概念、指针变量的声明和使用、指针和数组的关系等。 5. 内存管理:C语言需要手动管理内存,包括动态内存分配和释放。学习C语言需要了解如何使用malloc和free等函数来进行内存的动态分配和释放,并理解内存管理的原则和注意事项。 总之,C引用的主要学习内容是C语言的基本语法和特性,包括语法规则、数据类型、函数和库、指针以及内存管理等内容。通过学习这些内容,可以掌握C语言的编程技术,为后续的系统开发和嵌入式系统等领域的学习和实践奠定基础。 ### 回答3: C语言是一门被广泛应用于软件开发的编程语言,它具有简洁、高效、灵活等特点。C语言引用的主要学习内容包括语法、数据类型、运算符、控制语句、数组和指针等方面。 首先,学习C语言需要掌握其语法规则。它采用了一些简洁的语法结构,如使用分号表示语句结束,使用花括号表示代码块等。正确地理解和运用这些语法规则,是学习C语言的基础。 其次,学习C语言需要了解常用的数据类型和相关的操作。C语言提供了多种基本数据类型,如整型、浮点型、字符型等,以及相应的操作。掌握这些数据类型的特点和使用方法,能够更好地处理数据。 运算符也是C语言的重要学习内容之一。包括算术运算符、关系运算符、逻辑运算符等。了解运算符的优先级和使用规则,可以更灵活地进行各种运算操作。 控制语句也是C语言的关键学习内容。C语言提供了条件语句(如if-else语句)、循环语句(如for循环、while循环)等控制结构,通过这些语句可以实现程序的流程控制和逻辑判断。 此外,学习C语言还需要熟悉数组和指针的使用。数组是一组相同类型的数据元素的集合,它可以按照下标进行访问和操作。指针是一个变量,其值为内存地址,可以用来访问和操作其他变量的数据。 总之,C语言引用的学习内容主要包括语法规则、数据类型、运算符、控制语句、数组和指针等方面。只有掌握这些内容,才能熟练地使用C语言进行程序开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值