• C++——指针1


    7、关于内存地址

    内存空间的访问方式:通过变量名访问,通过地址访问;

    地址运算符:& 如:int var; 则&var表示变量var的内存起始地址;

    //& 出现在声明语句中出现时引用,别名而已,在运算表达式中出现&,说明是取内存地址。

    7.1 指针变量的概念  指针:内存地址,用于间接访问内存单元

                        指针变量:用于存放地址的变量

    声明: 如 static int i; static int *i_point[p1] =&i;

    在声明语句中,指针变量i_point存放的是内存地址&i,(*i-point)存放的是i的数值。     

    指针初始化:语法形式  存储类型 数据类型 *指针名=初始地址;  

    注意事项:用变量地址作为初值时,该变量必须在指针初始化之前已经说明,且变量类型应与指针类型一致。可以用一个已赋值的指针去初始化另一个指针变量;不要用一个内部auto变量去初始化static指针。

    指针变量的赋值运算: 指针名=地址  1.地址中存放的数据类型与指针类型相符;

                                     2.向指针变量赋的值必须是地址常量或变量,不能用普通整数,但可以赋值为0,表示空指针;

                                     3.指针的类型是它所指向变量的类型,而不是指针本身数据值的类型,任何一个指针本身的数据值都unsigned long int类型;

                                     4.允许声明指向void类型的指针,该指针可以接受任何类型对象的地址。

    #include<iostream>
    
    using namespace std;
    
    int main()
    
    {
    
            int *i_pointer;     //声明int型指针i_pointer
    
            int i;  //声明int型数i
    
            i_pointer=&i;      //取i的地址赋给i_pointer
    
            i=10;          //int型数赋初值
    
            cout<<"Output int i="<<i<<endl;          //输出int型数的值
    
          cout<<"Output int pointer i="<<*i_pointer<<endl;  //输出int型指针所指地址的内容
    
    }//程序运行的结果是:Output int i=10,Output int pointer i=10
    

      

    使用void类型的指针:

    void vobject;//错,不能声明void类型的变量

    void *pv;//对,可以声明void类型的指针

    int  *pint; int i;

    int main(){     pv = &i;  //void类型指针指向整型变量

      //void指针赋值给int指针需要类型强制转换:

      pint = (int *)pv; 

    }

    7.2 指向常量的指针

    不能通过指针来改变所值对象的值,但是指针本身可以改变,可以指向另外的对象。

    1

    char *name1="John"; //name1是一般指针,该字符串的地址赋值给name1

    *name1='A'; //编译正确,运行出错,因为这试图改变字符串常量"John"的值。

    2

    const char *name1="John"; //指向常量的指针,但是name1本身依然是变量。

    char s[]="abc";

    name1=s;  //正确,name1本身的值可以改变

    *name1='1'; //编译时指出错误

    若声明指针常量则指针本身的值不能被改变

    char *const name2=”john”;

    name2=”abc”;//错误,指针常量值不能改变。

    7.3 指针变量的算术运算

    指针与整数的加减运算

    –     指针p加上或减去n,其意义是指针当前指向位置的前方或后方第n个数据的地址。

    –     这种运算的结果值取决于指针指向的数据类型。

    指针加一,减一运算

    –     指向下一个或前一个数据。

    –     例如:y=*px++ 相当于 y=*(px++)
    (*和++优先级相同,自右向左运算)

       关系运算 同类型的指针变量可以相互比较和与0比较;

       赋值指针 赋值给指针的必须是变量或常量,不能是普通整数,除了0。

  • 相关阅读:
    php+Nginx 安装手册
    PostgreSQL 生成uuid
    登陆服务器错误: Disconnected:No supported authentication methods available
    安装Tengine
    netty解决方法 io.netty.util.IllegalReferenceCountException: refCnt: 0, increment: 1
    IntelliJ Idea 2016,2017,2018 注册码 免费激活方法
    jdbc连接"Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driv"
    mysql错误:you are using update mode and you tried to update a table without a where that uses a key column to disable safe mode
    spring介绍;安装;使用
    设置maven仓库阿里镜像
  • 原文地址:https://www.cnblogs.com/lemaden/p/10237972.html
Copyright © 2020-2023  润新知