zoukankan      html  css  js  c++  java
  • c++指针

    先由一段代码来引入:

    #include <iostream>
    using namespace std;
      
    int main(){
            int var = 1;
            int *p = &var;
    //      p = &var;
    //      *p = var;
            cout << p << endl;
            cout << *p << endl;
            cout << &p << endl;
            return 0;
    }
    

    这段代码的编译结果为

    0x7ffc1ba0fc34
    1
    0x7ffc1ba0fc38
    

    对一个指针的赋值应该为地址。不能将值符给指针。
    也就是说,行6和行7的赋值是合法的,而行8的赋值是非法的。
    这里非法的含义是不能以这样的方式赋值指针。因为指针的赋值是指令其存放一个地址,从而指向一个对象。
    行6 7 的意思都是指针p是指向var的。
    但是' *p = 2 '这样的赋值依旧是可以进行的,但需在指针赋值之后。这个语句是在做了指针赋值以后,通过对*p赋值来改变var的值。

    第6行赋值语句,在指针初始话的时候,前面的'*'可以视为没有,因此,行6和行7的赋值是等价的。
    这里要注意,行6和行8的'*'是不同的。
    这是因为行6'*'紧随类型名出现,是声明的一部分,而行8出现在表达式中,是一个解引用符。

    下面对一下运算进行总结,
    ' * ' ' & '在同类型名一起出现时为声明的一部分,同表达式一起出现时为运算符。
    ' * '可以看成对指针变量的取值运算。
    ' & '可以看成对变量的取地址运算。
    这里注意,指针里存着的是地址,而指针本身还有一个地址,总就是上面代码p, *p, &p 输出不同值的原因。

  • 相关阅读:
    Django数据库 相关之select_related/prefetch_related
    Django 序列化
    Django 信号
    Django缓存配置和使用
    Django FBV/CBV、中间件、GIT使用
    学员管理系统(SQLAlchemy 实现)
    Oracle的三种高可用集群方案
    linux系统安装硬盘分区建议
    Linux下expdp自动备份
    impdp导入报错ORA-39070:无法打开日志文件
  • 原文地址:https://www.cnblogs.com/litingyu/p/8541844.html
Copyright © 2011-2022 走看看