指针

今早起来脑子不清醒,在一个指针问题上犯了迷糊,影响了我一大早的心情。

写一些结论:

1.指针也是变量,特殊之处在于指针变量存放的是地址,这个地址就是别的变量的地址。也就是说指针指向一个变量

2.指针(1)的指针(2)也是变量,(2)特殊之处在于存放的是指针(1)的地址。这个地址就是指针(1)的地址。也就是说一个指针指向另一个指针。

3.指针的赋值操作。

同级别的赋值:

    int aa=1;
    int bb=2;

    int *a1=&aa;  //a1存放aa的地址
    int *a2=&bb;  //a2存在bb的地址
    int *a3=a1;   //a1的内容赋值给a3,即a3存放aa的地址

    qDebug()<<"a1"<<a1;  //aa的地址
    qDebug()<<"a2"<<a2;  //bb的地址
    qDebug()<<"a3"<<a3;  //aa的地址

    qDebug()<<"*a1"<<*a1;  //aa
    qDebug()<<"*a2"<<*a2;  //bb
    qDebug()<<"*a3"<<*a3;  //aa

    a1=a2;                  //a1存放a2内的地址

    qDebug()<<"a1"<<a1;    //bb的地址
    qDebug()<<"a2"<<a2;    //bb的地址
    qDebug()<<"a3"<<a3;    //aa的地址


    qDebug()<<"*a1"<<*a1;  //bb
    qDebug()<<"*a2"<<*a2;  //bb
    qDebug()<<"*a3"<<*a3;  //aa

运行结果:

a1 0x73fcbc
a2 0x73fcb8
a3 0x73fcbc
*a1 1
*a2 2
*a3 1
a1 0x73fcb8
a2 0x73fcb8
a3 0x73fcbc
*a1 2
*a2 2
*a3 1

不同级别的赋值:

    int aa=1;
    int bb=2;

    int *a1=&aa;  //a1存放aa的地址
    int *a2=&bb;  //a2存放bb的地址
    int **a3=&a1; //a3存放a1的地址

    qDebug()<<"a1"<<a1;  //输出aa的地址
    qDebug()<<"a2"<<a2;  //输出bb的地址
    qDebug()<<"a3"<<*a3; //输出aa的地址

    qDebug()<<"*a1"<<*a1;  //aa
    qDebug()<<"*a2"<<*a2;  //bb
    qDebug()<<"*a3"<<**a3; //aa

    a1=a2;                  //a1存放a2内的地址

    qDebug()<<"a1"<<a1;     //输出bb的地址
    qDebug()<<"a2"<<a2;     //输出bb的地址
    qDebug()<<"a3"<<*a3;    //由于a3存放的是a1的地址,a1内又变为bb的地址,所以输出bb的地址

    qDebug()<<"*a1"<<*a1;  //输出bb
    qDebug()<<"*a2"<<*a2;  //输出bb
    qDebug()<<"*a3"<<**a3;  //输出bb

输出结果:

a1 0x73fcc0
a2 0x73fcbc
a3 0x73fcc0
*a1 1
*a2 2
*a3 1
a1 0x73fcbc
a2 0x73fcbc
a3 0x73fcbc
*a1 2
*a2 2
*a3 2

 

posted @ 2020-05-09 11:28  sgggr  阅读(179)  评论(0编辑  收藏  举报