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日

悬赏问题

  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗