概述
一文读懂“&引用”、“&取地址”和“*解析地址”的使用
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:一文读懂“&引用”、“&取地址”和“*解析地址”的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复