我可以知道为什么这个函数的参数不是 int 类型吗?我不明白这里指针的整个概念

May I know why the parameter to this function isn't of int type? I don't understand the whole concept of the pointer here

本文关键字:明白 指针 这里 为什么 函数 int 我可以 参数 类型      更新时间:2023-10-16

我正在学习数据结构和算法,遇到了使用指针的链表。但是,我不明白它们在下面的代码中是如何使用的。谁能指导我?

int Linkedlist :: addatEnd(node* n){
    if(head == NULL){
        head = n;
        n->next = NULL;
    }else{
        node* n2 = getlastnode();
        n2->next = n;
    }
}

函数 addatEnd() 的参数不应该是 int 类型吗?但是,如果它真的是一个指针,这是否意味着它必须指向某个内存地址?

函数 addatEnd() 的参数不应该是 int 类型吗?

不。

链表由节点组成。每个节点将间接链接到(即引用,即点)到下一个节点,直到最后一个节点终止列表。整数不能间接指向下一个节点,因此链表的节点不能是整数。

但是,如果它真的是一个指针,这是否意味着它必须指向某个内存地址?

是的。它必须指向某个node实例(因为该函数通过指针间接)。该实例将存储在某个内存地址中。


附言函数已损坏。

仅当n->next是列表中的唯一元素时,它才会将 设置为 null。当有其他节点时,它无法设置n->next

此外,它被宣布返回int但没有这样做。程序的行为是未定义的。

函数 addatEnd() 的参数不应该是 int 类型吗?

它可以以不同的方式实现,但就目前而言,采用node*是有意义的。

但如果它真的是一个指针,这是否意味着它必须指向一个 某个内存地址?

通常,作为参数传递的指针不必指向有效的内存地址。它们也可以是空指针,该函数可以检测到并相应地继续。

但是,在这种情况下,

必须传递一个有效的指针,因为该函数正在尝试修改对象,至少如果head == NULL

n->next = NULL;

如果n没有指向有效的node,这是未定义的行为,可能会使程序崩溃,甚至更糟。

node是一个

单独的数据结构。node* n意味着,无论谁调用addatEnd(node* n)都将节点的地址作为参数传递。被调用方(调用你的函数的人)正在做:

Node n;//Instaniating node data structure
addatEnd(&node);//Passing the address of the node data structure to your function

传递节点的地址,使其不会单独复制节点结构并对其进行操作,并且我们对节点副本所做的任何操作都不会反映在原始节点上。

我们希望对原始节点数据结构进行操作,因此传递节点的地址,以便我们可以对最初实例化节点的内存位置进行操作。