21xrx.com
2024-11-08 22:06:06 Friday
登录
文章检索 我的文章 写文章
如何访问 C++ 中的 new 结构数组
2023-06-22 16:25:47 深夜i     --     --
C++ new 结构数组 访问 指针

在 C++ 中,new 关键字用于动态分配内存。如果我们想在程序中创建一个结构数组,我们可以使用 new 操作符来分配内存,并指定结构体类型和分配的元素数量。然而,在访问该数组时,我们需要小心处理地址和元素索引,以确保获得正确的结果。

以下是一个简单的例子,演示如何创建和访问一个结构数组:


// 定义一个简单的结构体

struct Person {

 char name[20];

 int age;

};

int main() {

 // 动态分配一个包含两个 Person 结构的数组

 Person *people = new Person[2];

 // 在数组中填充结构

 strcpy(people[0].name, "Alice");

 people[0].age = 25;

 strcpy(people[1].name, "Bob");

 people[1].age = 32;

 // 遍历数组并输出每个结构

 for (int i = 0; i < 2; i++) {

  cout << "Name: " << people[i].name << ", Age: " << people[i].age << endl;

 }

 // 释放数组所占用的内存

 delete[] people;

 return 0;

}

在这个例子中,我们先定义一个简单的结构体 Person,它包含一个字符串类型的 name 和一个整数类型的 age。接着,在 main 函数中,我们使用 new 操作符动态分配了一个大小为 2 的 Person 数组,并将其保存在 people 指针变量中。然后,我们遍历数组并对每个结构体进行填充,并输出每个结构的内容。最后,我们使用 delete[] 操作符释放数组所占用的内存。

需要注意的是,在访问数组时,我们使用了一个简单的索引操作,如 people[0].name 和 people[1].age。这个操作等价于使用指针和偏移量访问相应的内存单元。例如,people[1].age 可以写成 *(people+1).age,其中 *(people+1) 表示指向数组第二个元素的指针。

在使用 new 分配结构数组时,还需要特别注意内存泄漏和越界访问的问题。由于 new 分配的内存是在堆上分配的,因此必须在使用完后手动释放,否则可能会导致内存泄漏和程序崩溃。此外,在访问数组时,一定要确保索引值在数组范围之内,否则可能会导致未知的行为。因此,在编写程序时,要谨慎处理这些问题,以确保程序的正确性和稳定性。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复