gpt4 book ai didi

C++数组初始化

转载 作者:行者123 更新时间:2023-11-30 04:39:20 29 4
gpt4 key购买 nike

考虑到这一点:

typedef struct
{
int x;
int y;
} Coordinate;

Coordinate places[100];
  • 100 个坐标的内存是自动分配的吗?还是在初始化数组的每个元素时一次分配一个?

  • 如果您对数组的未初始化部分进行寻址会怎样?这会触发错误吗?

最佳答案

如何保留内存取决于声明数组声明的位置。如果它在全局范围内声明(即在函数外部),则 800 字节(假设整数为 32 位长)立即可供整个程序使用。如果它在函数内部,这 800 个字节将分配在堆栈上,并且在函数退出时无法访问。

所以在问题 1 中:是的,整个 100 个坐标在与声明相同的范围内可用。

问题 2:您可以随时访问所有 100 个元素,但它们的内容将未初始化。因此立即写入所有 100 个索引是安全的,只是在初始化它们之前不要读取它们。

如果您希望将它们全部初始化(比如初始化为 0,0),则改为声明:

struct Coordinate
{
int x;
int y;

Coordinate () : x(0), y(0) { }
};

当然,这只适用于 C++。如果您使用 C 语言编写代码,那么您将无法自动初始化数组中的元素。

读取 0 到 99 范围之外的值会产生未定义的行为。充其量,运行时会检测到给您一个运行时错误。在最坏的情况下,您会破坏内存并且在程序完成之前不会知道,让您想知道错误在哪里。所以要小心并确保您的索引在范围内。

通常的做法是提供一个函数来访问数组(不要直接访问数组),然后你可以在那里做一个断言检查来测试数组索引。

祝你好运

关于C++数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2318561/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com