&:取地址运算符,返回操作数所指的内存地址 *: 间接寻址运算符,返回操作数内存地址的值 *&:&返回操作数的内存地址,*&取操作数内存地址的值 因此,*&为操作数本身的值 **&:**&的操作数只能为指针,&为指针自己的地址,*&为指针所指向的地址 因此,**&为指针所指向的地址的值
#include <QCoreApplication>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int b = 123;
int *p = &b;
qDebug()<<"b:"<<b; // 123
qDebug()<<"&b:"<<&b; // 0x8ff938
qDebug()<<"*&b:"<<*&b; // 123
qDebug()<<"p:"<<p; // 0x8ff938
qDebug()<<"*p:"<<*p; // 123
qDebug()<<"&p:"<<&p; // 0x8ff944
qDebug()<<"*&p:"<<*&p; // 0x8ff938
qDebug()<<"**&p:"<<**&p;// 123
return a.exec();
}
b: 123 b的值为 123 &b: 0x8ff938 b的指向的地址为 0x8ff938 *&b: 123 b指向的地址的值为 123 p: 0x8ff938 p的值为 0x8ff938 *p: 123 p的值(地址)的值为 123 &p: 0x8ff944 p指向的地址为 0x8ff944 *&p: 0x8ff938 p指向的地址的值为 0x8ff938 **&p:123 p指向的地址的值(地址)的值为 123
使用*符号会开辟内存空间,开辟内存空间肯定会有执行的内存地址 *符号还可用于一维数组和二维数组的内存空间申请,其语法如下: 一维数组:int *A = new int[6]; 二维数组:int **B = new int *[6]; for(int i=0;i<10;i++){ // B[10][6] B[i] = new int[6]; } 注意:C++动态二维数组每一行都要开辟内存才能赋值 因为二维数组实际上是一个一维数组,只是一维数组的 每个值存放了另一个数组指针:每行开辟的数组的首地址
int length = _msize(A) / sizeof(*A);
数组的长度 = 数组占用的内存大小 / 数组数据类型的字节大小
申请的数组:int *A = int[6]; 数组的长度:int length = 6; 数组数据类型的字节大小:sizeof(*A)=4 数组的内存大小:_msize(A)=24
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有