今早起来脑子不清醒,在一个指针问题上犯了迷糊,影响了我一大早的心情。
写一些结论:
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