• C++ 03 指针与引用


    指针类型

    #include <iostream>
    
    
    int main(){
        int i = 1;
        int* a = &i;
        int *b = &i;
        int * c = &i;
        std::cout << "a="<<a << std::endl; // a=0x7ffeb29cf6ac
        std::cout << "b="<<b << std::endl; // b=0x7ffeb29cf6ac
        std::cout << "c="<<c << std::endl; // c=0x7ffeb29cf6ac
        return 0;
    }

    对于一个数据类型来说,星号的位置不重要,但实际上应该将指针的声明看作一种类型的声明,即将指针看作一种特殊的类型,指针类型

    那么星号的位置应该靠近具体的数据类型,比如整形int,星号应该与int写在一起:int* a

    指向函数的指针

    int  *add(int a, int b);

    返回指针的函数

    int*  add(int a, int b);

    引用

    让两个变量都指向同一地址的数据,或者说把一个变量的地址赋予另外一个变量

    #include <iostream>
    
    int main(){
        int a = 1;
        int &b = a;
        int& c = a;
        b = 2;
        printf("a=%d,b=%d,c=%d\n",a,b,c); // a=2,b=2,c=2
    
        c = 3;
        printf("a=%d,b=%d,c=%d\n",a,b,c); // a=3,b=3,c=3
        return 0;
    }

    &是取地址没错,但这里说的是引用,要定义一个变量的,这个变量也是个特殊的变量,所以同指针一样,应该将引用看作一个类型,即引用类型

    即是类型,虽然语法上不要求&的位置,但它应该与数据类型int写在一起,即平时应该写成int& a

    将int&看作一个整体,看作一个类型,用这个类型,就可以得到一个引用变量

    指针与引用的不同

    引用定义的变量与原变量本身没有任何不同,

    int a=1;int& b=a;

    假如a的地址是0x7ffeb29cf6ac,那么在编译阶段,a的位置会被替换为0x7ffeb29cf6ac,

    b也一样,在执行时,它们完全相同,

    唯一的不同就是在编码时我们看到的符号字母的不同,它们所代表的地址与地址指向的内容皆相同。

    int* a=&b; 在这里,&不是一个变量类型,而是取地址符号,表示将变量b的地址赋予变量a,

    它们的不同,实际上就这一点,一个是指向 变量地址所指,一个是指向 变量的地址

    后续皆多变化,实际是

    数据存储方式,比如,数据都是按字节来计算单位的,int 4字节,并且地址相连,数组的地址都是相连的,

    地址定义格式,比如是16进制数字,这一点决定了地址可以其他数字一样可以加,可以减,但由数据的定义可知,一次加减是一个数据的字节长度,

    指针在c++中非常非常重要,实际上指针与引用就这么一个不同之处,所以要掌握指针,实际是指,要掌握:

    变量在内存中的存储方式,具体是逻辑存储方式

    程序运行过程中,编译,执行两个阶段的后台逻辑是什么

    程序背后,计算机CPU, 寄存器,内存堆与栈...等操作系统这个级别是如何运转的,

    玩转指针,差不多就操作系统入门了,当然了,操作系统也是汇编,c/c++写的,学学操作系统对搞c/c++的人来说,只有好处

  • 相关阅读:
    java
    GO学习Day2
    GO学习Day1
    APS定时任务框架
    用微信每天给女朋友说晚安
    人生苦短,我用python
    Python 捕获terminate信号优雅关闭进程
    Python 多线程及多进程结合使用
    Python API 接口权限控制思路
    Docker runC 严重安全漏洞CVE-2019-5736 导致容器逃逸
  • 原文地址:https://www.cnblogs.com/perfei/p/15907122.html
Copyright © 2020-2023  润新知