前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C\C++中运算符&、*、 *&和 **&的区别

C\C++中运算符&、*、 *&和 **&的区别

作者头像
静谧星空TEL
发布2022-05-10 19:09:44
8780
发布2022-05-10 19:09:44
举报

符号分析

&:取地址运算符,返回操作数所指的内存地址 *: 间接寻址运算符,返回操作数内存地址的值 *&:&返回操作数的内存地址,*&取操作数内存地址的值         因此,*&为操作数本身的值 **&:**&的操作数只能为指针,&为指针自己的地址,*&为指针所指向的地址         因此,**&为指针所指向的地址的值

main.cpp

代码语言:javascript
复制
#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++动态二维数组每一行都要开辟内存才能赋值 因为二维数组实际上是一个一维数组,只是一维数组的 每个值存放了另一个数组指针:每行开辟的数组的首地址

数组长度

代码语言:javascript
复制
int length = _msize(A) / sizeof(*A);

数组的长度 = 数组占用的内存大小 /  数组数据类型的字节大小

申请的数组:int *A = int[6];  数组的长度:int length = 6; 数组数据类型的字节大小:sizeof(*A)=4 数组的内存大小:_msize(A)=24

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 符号分析
  • main.cpp
  • 运行结果
  • 结果分析
  • 补充说明
  • 数组长度
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档