如何在 main 中使用指针数组?
How do I use an array of pointers in main?
我试着问我的问题,但我似乎没有问对,我已经被困了 2 个月了。 (很难过)
仅供参考:我从节点构建了一个 linked 列表:
struct node {
int number;
node *next; };
对于link这些在main中我使用了->赋值
void insertAsFirstElement(node *&head, node *&tail, int number){
node *temp = new node;
temp->number = number;
temp->next = NULL;
head = temp;
tail = temp; }
现在我正在尝试制作一个跳过列表,它应该与我的原始节点具有相同的结构,除了节点* next 应该是一个节点类型的指针数组。
struct node {
int number;
node *next[3];
};
我对如何拥有节点指针数组感到困惑。我注意到它们看起来像这样: node **next 然后声明动态分配内存。我只希望我的数组大小为 4。所以 [3].
我的问题是如何在 main() 中使用节点指针数组创建新节点并将某些内容放入节点数组的第一个槽中?
这不适用于将东西放入数组,但它确实适用于放入数字。
void insertAsFirstElement(node *&head, node *&tail, int number){
node *temp = new node;
temp->number = number;
cout<<temp->number<<endl;
temp->next[0] = tail;
cout<<temp->next[0]<<endl;
head->next[0] = temp;
cout<<head->next[0]<<endl;
}
请帮助我。
->
运算符是 shorthand.
如果没有 ->
运算符,您将编写
(*var).prop;
使用 ->
运算符,你写:
var->prop;
因此,要在列表的第一个位置存储一个节点,您可以这样写:
void StoreNode(node *node){
node *temp = new node;
temp->next[0]=node;
}
要从列表中的节点检索数据,您可以这样写:
temp->next[0]->number
写法一样
(*temp).next[0]->number
写法一样
( *((*temp).next[0]) ).number
你的这行代码看起来有点混乱:
void insertAsFirstElement(node *&head, node *&tail, int number){
请记住,您只是将节点地址传递给函数。因此,您只需要
void insertAsFirstElement(node *head, node *tail, int number){
在函数内部,您必须在列表中找到正确的位置,即进入 **
符号时。
代码乍一看还不错。指针数组就是这样,一个元素数组,其中每个元素都是一个指针,您可以完全按照代码显示的语法使用它。
但是请注意,在 class 中声明指针数组时,元素不会自动初始化,因此您可能希望将尚未使用的元素修复为 NULL。此外,在跳过列表中,您可能需要知道在哪个 "level" 位置插入了节点。
你确定你的问题出在那个部分吗?对于 C++,错误通常不会在它完成的时候出现,而是在很久以后才出现。发生这种情况是因为语言的 "undefined behavior" 规则(又名 "programmers never make mistakes")。
我试着问我的问题,但我似乎没有问对,我已经被困了 2 个月了。 (很难过)
仅供参考:我从节点构建了一个 linked 列表:
struct node {
int number;
node *next; };
对于link这些在main中我使用了->赋值
void insertAsFirstElement(node *&head, node *&tail, int number){
node *temp = new node;
temp->number = number;
temp->next = NULL;
head = temp;
tail = temp; }
现在我正在尝试制作一个跳过列表,它应该与我的原始节点具有相同的结构,除了节点* next 应该是一个节点类型的指针数组。
struct node {
int number;
node *next[3];
};
我对如何拥有节点指针数组感到困惑。我注意到它们看起来像这样: node **next 然后声明动态分配内存。我只希望我的数组大小为 4。所以 [3].
我的问题是如何在 main() 中使用节点指针数组创建新节点并将某些内容放入节点数组的第一个槽中?
这不适用于将东西放入数组,但它确实适用于放入数字。
void insertAsFirstElement(node *&head, node *&tail, int number){
node *temp = new node;
temp->number = number;
cout<<temp->number<<endl;
temp->next[0] = tail;
cout<<temp->next[0]<<endl;
head->next[0] = temp;
cout<<head->next[0]<<endl;
}
请帮助我。
->
运算符是 shorthand.
如果没有 ->
运算符,您将编写
(*var).prop;
使用 ->
运算符,你写:
var->prop;
因此,要在列表的第一个位置存储一个节点,您可以这样写:
void StoreNode(node *node){
node *temp = new node;
temp->next[0]=node;
}
要从列表中的节点检索数据,您可以这样写:
temp->next[0]->number
写法一样
(*temp).next[0]->number
写法一样
( *((*temp).next[0]) ).number
你的这行代码看起来有点混乱:
void insertAsFirstElement(node *&head, node *&tail, int number){
请记住,您只是将节点地址传递给函数。因此,您只需要
void insertAsFirstElement(node *head, node *tail, int number){
在函数内部,您必须在列表中找到正确的位置,即进入 **
符号时。
代码乍一看还不错。指针数组就是这样,一个元素数组,其中每个元素都是一个指针,您可以完全按照代码显示的语法使用它。
但是请注意,在 class 中声明指针数组时,元素不会自动初始化,因此您可能希望将尚未使用的元素修复为 NULL。此外,在跳过列表中,您可能需要知道在哪个 "level" 位置插入了节点。
你确定你的问题出在那个部分吗?对于 C++,错误通常不会在它完成的时候出现,而是在很久以后才出现。发生这种情况是因为语言的 "undefined behavior" 规则(又名 "programmers never make mistakes")。