当前位置 博文首页 > qq262593421的博客:C\C++中运算符& * *& **&的区别
&:取地址运算符,返回操作数所指的内存地址
*: 间接寻址运算符,返回操作数内存地址的值
*&:&返回操作数的内存地址,*&取操作数内存地址的值
? ? ? ? 因此,*&为操作数本身的值
**&:**&的操作数只能为指针,&为指针自己的地址,*&为指针所指向的地址
? ? ? ? 因此,**&为指针所指向的地址的值
#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);
数组的长度 = 数组占用的内存大小 / ?数组数据类型的字节大小
cs申请的数组:int *A = int[6];?
数组的长度:int length = 6;
数组数据类型的字节大小:sizeof(*A)=4
数组的内存大小:_msize(A)=24