c++基础之引用和指针的学习和区别

引用

变量名:实质上是一段连续存储空间的别名,十一个标号(门牌号)。
程序中通过变量来申请并命名内存空间,通过变量的名字可以使用存储空间
问题:对一段连续的内存空间只能取一个别名嘛?
c++中新增加引用的概念,可以看作一个已定义变量的别名
引用的语法

Type& name = var;
  • 单独定义引用时,必须初始化。引用和原有变量指向同一块内存空间
int  a = 10;
int &b = a;
cout << "&a:' << &a <
  • 普通引用有自己的内存空间,和指针的内存空间一样
struct Teacher
{
    char name[64];
    int     age;
    int     &a;
};
cout << "sizeof(Teacher):" << sizeof(Teacher) <
  • 引用在c++中的内部实现是一个常指针,c++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同。
Type& name <--->Type* const name

引用的实现只是把间接赋值成立的三个条件的后两步合二为一

void modifyA(int &a1)
{
    a1 = 100;
} 

void modifyB(int * const a1)
{
    *a1 = 1000;
} 
 int main()
 {
    int a =10;
    modifyA(a);//指向这个函数调用的时候,我们程序员不需要取a得地址 
    printf("a :%d \n",a); 
    
    modifyB(&a);
    printf("a :%d \n",a); //如果是指针,需要我们手工的取实参地址 
 }

结果分别输出a=100和a=1000

指针

  • 指针是一种数据类型
  1. 指针是一种变量,占有内存空间,用来保存内存地址(sizeof())
  2. p操作内存
    在指针声明时,
    号表示所声明的变量是指针
    在指针使用时,*号表示操作指针所指向的内存空间中的值
    *p相当于通过地址(p变量的值)找到一块内存,然后操作内存
    *p放在等号左边赋值(给内存赋值)
a = 10;
p = &a;
*p = 20;
*就像一把钥匙,通过一个地址&a去修改a变量标识的内存空间

*p放在等号的右边取值(从内存获取值)

int c = 0;
c = *p;
  • 间接赋值(*p)是指针存在的最大意义
    间接赋值成立的三个条件:
  1. 定义两个变量(一个实参,一个形参)
  2. 建立关联,实参取地址传给形参
  3. p形参间接的修改实参的值
    函数调用时,用n指针(形参)改变n-1指针(实参)的值
    函数调用时,形参传给实参,用实参取地址,传给形参,在被调函数里用
    p来改变实参,把运算结果传出来。
  • 分别用指针和引用交换数据


    image.png

你可能感兴趣的:(c++基础之引用和指针的学习和区别)