我是靠谱客的博主 细心黑裤,最近开发中收集的这篇文章主要介绍2020-12-13:一文读懂“&引用”、“&取地址”和“*解析地址”的使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一文读懂“&引用”、“&取地址”和“*解析地址”的使用

C++中才支持&引用的使用,C语言中仅支持&取地址,*解析地址的使用,请读到文章的同志们注意,谢谢!

& 引用

常规引用

引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
作为引用的时候,必须在定义时候就进行初始化,若不进行初始化则会编译报错。

int N;
int &rN = N;

引用创建之后,后面操作创建的引用rN,也会同步到变量N上;

使用示例
#include <stdio.h>

int main()
{
	int N = 10;
	int &rN = N;
	rN = rN - 5;
	printf("N: %dn", N);
	return 0;
}

*******
N: 5
*******
函数中使用引用function(int &i)

函数中传递形参如果是int &i的形式,也是变量的引用,具体示例如下

正常创建的函数
int function(int i){
	i++;
	return i;
}
使用引用变量作为形参的函数
int functionReference(int &i){
	i++;
	return i;
}
使用示例
int x = 5;
function(x);			// result: 6; x: 5
functionReference(x);	// result: 6; x: 6

& 取地址

&作为取地址用的时候,要跟指针联系在一起,因为指针就是用来存放地址的。
取地址就是你想取某变量(形参或者实参)的地址就用 & 前置表示要取地址了,取的是该变量的内存地址。

int N = 100;	// 定义变量N
int *p;			// 定义整形指针p
p = &N;			// 取变量N的地址,并使指针p指向改地址
使用示例
#include <stdio.h>
int main()
{
	int N = 100;
	int *p;
	p = &N;
	printf("N: %dn", N);	// N的值
	printf("&N: %dn", &N);	// N的地址
	printf("p: %dn", p);	// p的值
	printf("*p: %dn", *p);	// p存放的地址,取地址对应空间存放的值
	return 0;
}

&引用 和 &取地址的区别

引用的格式:
类型名 & 别名 = var;
1.定义的时候必须初始化,即& 前面有类名或类型名,&别名后面一定带 “=” (在= 左边);
2.&后面的别名是新的名字,之前不存在。

&取地址时:
如果&是取址运算符,也就意味着取一个变量的地址并付给指针变量。&后面紧跟的是变量(已存在);

* 解析地址,取地址空间中存放的值

*a表示:取出变量a中对应存储地址空间中的值;首先,要求a对应的存储单元中的数据一定是另一个存储单元的地址。

int a;

变量a 本质上代表一个存储单元。CPU通过该存储单元的地址访问该存储单元中的数据。
所以a本来代表两个值:存储单元的地址和储单元中的数据。
于是就有了二异性。
为了消除这种二义性,C语言规定a表示存储单元中的数据,&a表示存储单元的地址。
a存储单元中的数据可以是一个普通数值,也可以是另一个存储单元的地址,比如:a = &b;
语句就是将b的存储单元的地址存入a存储单元中。C语言规定*a代表a中存储的地址对应的存储单元中的数据,也就是访问*a就等于访问b,于是*a提供了通过a访问b中的数据的手段。

a表示a对应的存储单元中的数据。
&a表示a对应的存储单元的地址。

使用示例
int a = 12;
int *b;
b = &a;
printf("a: %dn", a);  	// 12
printf("b: %dn", b);	// 6422024
printf("*b: %dn", *b);	// 12

最后,在C语言里地址叫指针。还有,在C语言中的数组本质上其实也是指针,即:*a 等同于 a[]。
至于数组和指针之间的实践,可以参考另外一篇实践;

C++语言中采用&引用的使用;C语言没有&引用,在此说明,请注意!!!

完整示例如下:

#include <stdio.h>

int function(int i){
	i++;
	return i;
}

int functionReference(int &i){
	i++;
	return i;
}

int main()
{
	int N;
	int &rN = N;
	N = 10;
	rN -= 5;
	printf("N: %dn", N);
	int i = 100;
	printf("i: %dn", i);
	printf("function(i): %dn", function(i));
	printf("i: %dn", i);
	printf("functionReference(i): %dn", functionReference(i));
	printf("i: %dn", i);
	return 0;
}

PS

主要介绍 &引用、&取地址和*解析地址的使用和区别,仅为记录总结之用!

最后

以上就是细心黑裤为你收集整理的2020-12-13:一文读懂“&引用”、“&取地址”和“*解析地址”的使用的全部内容,希望文章能够帮你解决2020-12-13:一文读懂“&引用”、“&取地址”和“*解析地址”的使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(86)

评论列表共有 0 条评论

立即
投稿
返回
顶部