我可以知道为什么这个函数的参数不是 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 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
传递节点的地址,使其不会单独复制节点结构并对其进行操作,并且我们对节点副本所做的任何操作都不会反映在原始节点上。
我们希望对原始节点数据结构进行操作,因此传递节点的地址,以便我们可以对最初实例化节点的内存位置进行操作。
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 不明白迭代器,引用和指针失效,一个例子
- 不明白使用双指针 (**) 创建 2d 动态数组
- 我不明白我的错误需要返回一个指针数组
- c ++ 2d 数组和指向指针的指针 - 我不明白这段代码
- 我不明白数组名称是如何指向数组的指针
- 我不明白指针变量在传递到函数时是如何工作的
- 我明白为什么,但是虚拟函数/VTable 究竟如何允许通过指针访问正确的函数?
- 我可以知道为什么这个函数的参数不是 int 类型吗?我不明白这里指针的整个概念
- 关于将指针作为参数传递,我有什么不明白的?
- 我不明白指针算术C++
- 我不明白这个关于指针的课程
- 我成功地在堆中分配了一个指向3个int型数组的指针,但我仍然不明白对数组的访问是如何工作的
- vector std::out_of_range 在我自己的模板类中(指向列表节点的指针向量),但我不明白为什么