C++ 链表箭头运算符

C++ 链表箭头运算符,c++,c,pointers,linked-list,C++,C,Pointers,Linked List,在一个基本的链表程序中,我通常执行以下步骤: struct node { int info; struct node * next; }; int main() { struct node * head = malloc(sizeof(node)*3); //for 3 nodes head->info = 1; head->next->info = 2; head->next->next->info = 3;

在一个基本的链表程序中,我通常执行以下步骤:

struct node {
    int info;
    struct node * next;
};

int main() {
    struct node * head = malloc(sizeof(node)*3); //for 3 nodes
    head->info = 1;
    head->next->info = 2;
    head->next->next->info = 3;
    //more code
}
现在,为了打印第二个节点的内容,我使用以下语句:

cout<<head->next->info;
我的问题是,是否可以使用以下语句来代替上述语句:

cout<<head[1]->info;
cout<<head[1]->info;

链表意味着包含内存中不连续的元素。格式头[1]需要连续元素

无论如何,示例中的代码并不表示链表

我的问题是,是否可以使用以下语句来代替上述语句:

cout<<head[1]->info;
cout<<head[1]->info;
在您的例子中,事实上,是的,因为您的代码不创建链表,而是更像一个数组。一种数组,其中每个元素显然应该在下一个元素旁边有一个指针,但所有这些指针都未初始化


使用std::list,直到您知道链表是如何工作的。。。然后继续使用它

否。head是一个指针,head[1]表示*head+1,但在您的列表中,每个列表节点都不是相邻的。通常,除非您将每个节点逐个放置在相邻的地址中,否则列表无法执行此操作


另外,对不起,我的英语很差

这是我经常做的事。你永远不应该实施它。您应该使用std::list.BTW您的代码完全错误-您的下一个指针都未初始化。链表无论如何都不应该是连续的元素块。在上面的实现中,您从未设置head->next或其任何子元素的值。当您尝试去引用未初始化指针时,这很可能会导致异常。链表和数组的有趣组合。要清楚,Ext @将谈论的不是C++异常,而是OS内存异常。我会告诉他/她:学习链表如何工作,然后开始并继续使用std::list。在他的列表中,每个节点都是相邻的。