1. 指针是一个实体,而引用仅是个别名;
2. 引用使用时无需解引用(*),指针需要解引用;
3. 引用只能在定义时被初始化一次,之后不可变;指针可变;
4. 引用没有 const,指针有 const;
5. 引用不能为空,指针可以为空;
6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
7. 指针和引用的自增(++)运算意义不一样;
8.从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。
int *p = 地址
p=地址
*p = 值
int &a = 值
a = 值
&x = 求x地址
扫描二维码关注公众号,回复:
1438298 查看本文章
一、变量的引用:
引用:就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
引用的声明方法:类型标识符 &引用名=目标变量名;
例:char ch;
char &rp=ch;
1)引用仅是变量的别名,而不是实实在在地定义了一个变量,因此引用本身并不占用内存,而是和目标变量共同指向目标变量的内存地址.
2)表达式中的取地址符&不再是取变量的地址,而是用来表示该变量是引用类型的变量。
3)定义一个引用时,必须对其初始化。
示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#include <stdio.h>
#include <iostream>
using
namespace
std;
//c++中的引用实例
void
fun(
int
&x){
printf
(
"形式参数的值为:%d\n"
,x);
printf
(
"形式参数的地址为:%d\n"
,&x);
x+=10;
}
void
fun2(
int
*num){
printf
(
"形式参数的值为:%d\n"
,*num);
printf
(
"形式参数的地址值为:%d\n"
,num);
//2686724
printf
(
"形式参数的地址为:%d\n"
,&num);
//2686704 这个和
*num =(*num)+10;
}
int
main(
void
){
int
num = 4,a=3;
printf
(
"实参num的值为:%d\n"
,num);
printf
(
"实参num的地址为:%d\n"
,&num);
//都是一样的
fun(num);
cout<<
"num的值为:"
<<num<<endl;
//14 num的值改啦
fun2(&a);
printf
(
"实参a的值为:%d\n"
,a);
printf
(
"实参a的地址为:%d\n"
,&a);
//
return
0;
}
|
从图中可以看出1.引用和目标变量的地址是一样的,对引用的修改就是对目标变量的修改。
2. 而后边用指针作为函数参数,把地址传过去,指针变量的地址是2686608,而它的值是2686696(在指针的地址上存的值),2686696这个地址指向的值是3,也就是num的值。
3.指针变量是有自己的值的(2686608),和num的地址(2686696)不一样,而引用的地址是和变量的值一样的。