java叶新东老师 2023-03-13 22:47 采纳率: 83.3%
浏览 20
已结题

c++这样写为什么会报错?

在c++中,基本数据类型直接取地址赋值给指针就没问题, 但是数组对象取地址赋值给指针就会报错,这是为啥呀?

  
    int i = 10;
    int * pi = &i; // 这样不报错

    
    int i1[2] ={100,1};
    int * p_i1 = &i1;  // 这样会报错,为什么?
  • 写回答

3条回答 默认 最新

  • 码农学长 2023-03-13 23:02
    关注

    在C++中,数组名被视为指向数组首元素的指针,因此可以在某些情况下将数组名视为指针来使用。但是,数组名本身并不是指针类型,它只是一个常量指针(也称为数组指针),指向数组首元素的地址。因此,在将数组名取地址时,需要使用取地址运算符 &。

    在你的代码中,当你尝试将数组名 i1 直接赋值给指针 p_i1 时,编译器会发出错误,因为数组名 i1 不是指针类型,不能直接赋值给指针变量。正确的写法是使用取地址运算符 &,将数组首元素的地址赋值给指针变量 p_i1,如下所示:

    int i1[2] = {100,1};
    int* p_i1 = &i1[0];  // 或者使用 int* p_i1 = i1;
    
    

    或者可以使用数组名 i1 直接作为指针使用,因为数组名被视为指向数组首元素的指针:

    
    int i1[2] = {100,1};
    int* p_i1 = i1;  // 直接使用数组名 i1 作为指针
    
    

    望采纳,谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月22日
  • 已采纳回答 3月14日
  • 创建了问题 3月13日

悬赏问题

  • ¥15 根据以下文字信息,做EA模型图
  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥60 关机时蓝屏并显示KMODE_EXCEPTION_NOT_HANDLED,怎么修?
  • ¥66 如何制作支付宝扫码跳转到发红包界面