You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

new表达式返回数组首元素地址还是整个数组地址?如何访问动态数组元素?

关于C++中new数组的常见问题解答

问题1:new int[]返回的是数组首元素的地址还是整个数组的地址?

对于代码:

int *a = new int[16];

new int[16]返回的是数组首元素的地址。在C++中,动态分配数组时返回的指针类型是指向数组元素类型的指针(此处为int*),它指向数组的第一个元素。不存在所谓“整个数组的地址”——数组的起始地址本质上就是首元素的地址,数组本身没有额外的独立地址标识。

问题2:后续该如何访问这个数组?变量a存储的是整个数组的地址还是仅首元素的地址?

  • 访问数组的两种常用方式:
    1. 数组下标语法:a[i],其中i取0到15的整数(对应数组16个元素),直接访问第i+1个元素。
    2. 指针偏移语法:*(a + i),通过指针偏移间接访问元素,效果和a[i]完全等价。
  • 变量a存储的是首元素的地址。因为a的类型是int*,只能存储单个int类型的地址,也就是数组第一个元素的内存地址。

问题3:该如何访问结构体数组中的元素?

对于给定的结构体数组代码:

struct student {
   string name;
   int age;
};

int num_students = get_number_of_students();
struct student *students = new student[num_students];

访问结构体数组元素的方式和普通数组类似,常见两种写法:

  1. 下标访问(推荐,可读性更高):
    使用students[i]获取第i个student结构体(i从0到num_students-1),然后通过成员访问符.获取结构体成员:
    // 访问第i个学生的姓名和年龄
    cout << students[i].name << endl;
    cout << students[i].age << endl;
    
  2. 指针偏移访问:
    通过students + i得到指向第i个结构体的指针,然后使用->访问成员(或先解引用再用.):
    // 两种等价写法
    cout << (students + i)->name << endl;
    cout << (*(students + i)).age << endl;
    

内容的提问来源于stack exchange,提问作者user20055175

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 10:55:14