在c++中,将结构内部的数组归零
zero an array inside a struct in c++
我在程序中定义了一个结构。
struct A{
int arr[10];
}
比方说我有一个指向它的指针。A * a = new A;
我可以通过两种方式将其归零:
memset(&a->arr,0,sizeof(A));
memset(a->arr,0,sizeof(A));
工作和外表都一样!
哪一个更正确?
哪一个更正确?
我也不会争辩。最简单的方法是对分配的对象进行值初始化:
A * a = new A();
当然,这假设您实际上有充分的理由new
这个对象。
由于您正在使用C++,我将利用C++11的功能并使用:
#include <iostream>
#include <cmath>
using namespace std;
struct A{
int arr[10]{}; // initializes array with all 0's
};
int main() {
A * a = new A;
for (auto e : a->arr) // ranged based for loop to show all of the 0's
cout << e << "n";
return 0;
}
您可以看到它与此Live Example 一起运行
虽然每个表达式的类型不同,但实际结果,即传递给memset
的指针,在这两种情况下都是相等的。
就我个人而言,我可能会在C++程序中使用std::fill
而不是memset
:
std::fill(std::begin(a->arr), std::end(a->arr), 0);
还要注意,如果结构中有更多成员,则sizeof(A)
将不同于sizeof(a->arr)
(或sizeof(A::arr)
)。
您可以定义一个默认的构造函数
struct A{
int arr[10];
A():arr(){}
};
这是数组的正确方式
memset(a->arr,0,sizeof(a->arr))
挑选出arr成员,以防有其他不需要触摸的结构成员。在你的例子中没有区别,下面的也会这样做
memset(a->arr,0,sizeof(A));
相关文章:
- 在函数内部的声明中初始化数组,并在外部使用它
- C++20 从括号中的值列表初始化聚合,不支持内部数组
- 有人可以解释一下吗?这是关于数组和数组内部 if 语句的一些处理
- 在std::数组内部使用时,无法从std::函数构造类
- 类本身内部的类对象的静态constexpr数组
- 使用 memcpy 在数组内部复制的 C++
- 使用内部函数递增数组的特定元素
- 静态数组溢出堆栈(seg 错误 11)仅在类定义内部时,否则不会..?
- 是否可以设置 stl::d eque 的内部数组的大小
- 将复杂的结构(带有结构的内部数组)从 C# 传递到C++
- 如何从主内部的数组打印总计
- C 如何将数组传递到功能内部功能
- 如何知道何时重新分配向量的内部数组
- 创建数组数组 (2D),而无需在 Java 中初始化内部数组
- 不了解什么是内部数组
- std::vector 实现是否使用内部数组或链表或其他
- 函数内部数组的动态分配
- 为什么Serial.println()会改变函数内部数组的值
- 纯虚类(接口)和继承它的对象的内部数组分配
- c++隐式类构造内部数组初始化