C++ 引用 和 指针

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)不一样,而引用的地址是和变量的值一样的。

猜你喜欢

转载自blog.csdn.net/a133900029/article/details/80502984