1. 指针是一个实体,而引用仅是个别名;
2. 引用使用时无需解引用(*),指针需要解引用;
3. 引用只能在定义时被初始化一次,之后不可变;指针可变;
4. 引用没有 const,指针有 const;
5. 引用不能为空,指针可以为空;
6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
7. 指针和引用的自增(++)运算意义不一样;
8.从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。



int *p = 地址

p=地址

*p = 值


int &a = 值

a = 值

&x = 求x地址


一、变量的引用:

引用:就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。

引用的声明方法:类型标识符 &引用名=目标变量名;

 例: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;
}

  C++ 引用 和 指针

     从图中可以看出1.引用和目标变量的地址是一样的,对引用的修改就是对目标变量的修改。

                         2. 而后边用指针作为函数参数,把地址传过去,指针变量的地址是2686608,而它的值是2686696(在指针的地址上存的值),2686696这个地址指向的值是3,也就是num的值。

                         3.指针变量是有自己的值的(2686608),和num的地址(2686696)不一样,而引用的地址是和变量的值一样的。

相关文章:

  • 2021-11-02
  • 2021-06-27
  • 2021-11-01
  • 2022-12-23
  • 2022-12-23
  • 2022-02-15
猜你喜欢
  • 2022-01-22
  • 2022-12-23
相关资源
相似解决方案