Char 数组解释为构造函数中的 char 指针请帮助


#ifndef ASSETS_H_INCLUDED
#define ASSETS_H_INCLUDED
#include <vector>
#include string.h>
const int ID_Max = 100;
typedef char ID[ID_Max];
struct node;
struct people{
std::vector<ID> T_ID;
std::vector<node*> Nodes;
people(ID t, node* person){
    T_ID.push_back(t);
    Nodes.push_back(person);
}
people(){}
};
struct node {
ID T_ID;
node* Parent;
people* leftChildren;
node* rightChild;
node(ID t, node* p, node* l, node* r) :I_ID(t), Parent(p), rightChild(r) 
{leftChildren = new people(); }
};
#endif // ASSETS_H_INCLUDED

我的问题是,当在构造函数中时,它将 ID 解释为 char 指针,所以这是构造函数 people::p eople(char*, node*) 当我希望 people::p eople(char[ID_Max], node*) 与节点相同时。如果您有建议,将不胜感激。

如果你编写一个包含数组类型的函数签名,它与使用指针相同,例如:

void f(char p[]);

同这个:

void f(char *p);

这似乎是您问题的根源。例如,使用std::array<char,ID_Max>(C++11)或std::vector<char>(C++98)可能会更好。然后,您可以使用 &cont[0] 获取指向它包含的连续内存开头的指针。作为一个小问题,我似乎记得vector的记忆在 C++98 中并不能严格保证是连续的,但它在实践中总是连续的(你可以依靠它)。措辞在 C++03 中得到修复。

最新更新