首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将指针作为参数传递到函数中(名为: insertattail)仍然不赋值

将指针作为参数传递到函数中,不赋值的情况下,意味着函数无法修改指针所指向的内存地址的值。这是因为在函数中,参数是按值传递的,即函数会创建一个参数的副本,并在函数内部操作该副本,而不是直接操作原始的指针。

在函数中,如果我们想要修改指针所指向的内存地址的值,可以通过传递指针的指针或者指针的引用来实现。这样,在函数内部就可以通过解引用指针来修改其指向的内存地址的值。

下面是一个示例代码,展示了如何将指针作为参数传递到函数中,并在函数内部修改其指向的内存地址的值:

代码语言:txt
复制
#include <iostream>

// 定义一个结构体
struct Node {
    int data;
    Node* next;
};

// 在链表尾部插入新节点的函数
void insertAtTail(Node** head, int newData) {
    // 创建新节点
    Node* newNode = new Node();
    newNode->data = newData;
    newNode->next = nullptr;

    // 如果链表为空,将新节点作为头节点
    if (*head == nullptr) {
        *head = newNode;
        return;
    }

    // 找到链表的尾部节点
    Node* tail = *head;
    while (tail->next != nullptr) {
        tail = tail->next;
    }

    // 将新节点插入到尾部
    tail->next = newNode;
}

int main() {
    // 创建一个空链表
    Node* head = nullptr;

    // 在链表尾部插入节点
    insertAtTail(&head, 1);
    insertAtTail(&head, 2);
    insertAtTail(&head, 3);

    // 打印链表的值
    Node* current = head;
    while (current != nullptr) {
        std::cout << current->data << " ";
        current = current->next;
    }

    return 0;
}

在上述示例代码中,我们定义了一个结构体 Node,表示链表的节点。然后,我们实现了一个名为 insertAtTail 的函数,该函数将指针 head 的指针作为参数传递进来,并在函数内部修改其指向的内存地址的值。通过传递指针的指针 Node** head,我们可以在函数内部修改指针 head 所指向的内存地址的值,从而实现在链表尾部插入新节点的功能。

main 函数中,我们创建了一个空链表,并通过调用 insertAtTail 函数,在链表尾部插入了三个节点。最后,我们遍历链表并打印节点的值。

这样,我们就成功地将指针作为参数传递到函数中,并在函数内部修改了其指向的内存地址的值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言函数指针基础

参数函数指针 好了,这一次我们来创建一个新的函数指针吧。它指向的函数仍然返回任何值,但有了参数。...带参数且有返回值的函数指针 这一次,我们把subtractAndPrint函数改成一个名为subtract的函数,让它把原本输出到屏幕上的结果作为返回值。...1819行,我们用调用普通函数的方法调用了函数指针,并且输出了结果。 这跟之前没什么两样,我们只是加上了返回值而已。接下来我们看看另一个稍微复杂点儿的例子——把函数指针作为参数传递给另一个函数。...把函数指针作为参数传递 我们已经了解过了函数指针声明和执行的各种情况,不论它是否带参数,或者是否有返回值。接下来我们利用一个函数指针来根据不同的输入执行不同的函数。...因此,这是一个接受一个函数指针和两个整数作为参数函数。 1921行,domath函数将自己的后两个整数参数传递函数指针并调用它。当然,也可以像这么调用。

1.6K100

开启C++之旅(下):引用、内联函数及现代特性(auto和范围for循环)

这也是为什么对a进行类型转换后赋值,但是a不发生变化 1.4引用使用场景 1.4.1做参数函数中使用引用作为参数,可以让你直接操作传递函数的变量,而不是对其进行复制。...然而,使用引用作为返回值需要小心,确保引用所指向的变量在函数返回后仍然有效 使用引用作为返回值的语法是在函数声明或定义中将函数返回类型声明为引用类型。...)就销毁了,不能用引用返回,否则结果是不确定 最好返回指向全局变量、静态变量、或动态分配内存的引用,确保引用在函数返回后仍然有效 如果使用static来解决上述问题,一定把静态变量初始化和赋值分开...,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量 3.3auto不能使用的场景 auto不能作为函数参数 auto不能直接用来声明数组 为了避免与C++98的auto发生混淆...for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围 基于范围的for循环会依次容器的元素赋值给迭代变量(通常命名为element)。

22910
  • 详细介绍 Go 语言中函数的特点、定义、参数传递、返回值、匿名函数

    本文详细介绍 Go 语言中函数的特点、定义、参数传递、返回值、匿名函数以及函数作为参数和返回值等相关内容。图片函数的定义和调用在 Go 语言中,函数可以通过 func 关键字进行定义。...在 main 函数,我们变量 y 的值作为参数传递函数 changeValue。尽管在函数内部将 x 的值修改为 10,但是在 main 函数,变量 y 的值仍然是 5。...在 main 函数,我们使用 & 运算符获取变量 y 的地址,并将其作为参数传递函数 changeValue。在函数内部,我们通过 *x 修改了指针所指向内存地址的值。...} fmt.Println(add(2, 3)) // 输出:5}在上面的例子,我们一个匿名函数赋值给变量 add。...然后,我们定义了一个名为 compute 的函数,该函数接受一个函数参数 fn,并在函数体内调用该函数。在 main 函数,我们 add 函数作为参数传递给 compute 函数,并输出结果。

    24630

    const关键字应用总结

    函数中使用const const修饰函数参数 传递过来的参数函数内不可以改变(无意义,因为Var本身就是形参) void function(const int Var); 参数指针所指内容为常量不可变...类相关const const修饰成员变量 const修饰类的成员函数,表示成员常量,不能被修改,同时它只能在初始化列表赋值。...常量指针被转化成非常量指针,并且仍然指向原来的对象; 常量引用被转换成非常量引用,并且仍然指向原来的对象; 常量对象被转换成非常量对象。...4 小结 要大胆的使用const,这将给你带来无尽的益处,但前提是你必须搞清楚原委;要避免最一般的赋值操作错误,如const变量赋值; 在参数中使用const应该使用引用或指针,而不是一般的对象实例...,原因同上;const在成员函数的三种用法(参数、返回值、函数)要很好的使用; 不要轻易的函数的返回值类型定为const;除了重载操作符外一般不要将返回值类型定为对某个对象的const引用; 任何不会修改数据成员的函数都应该声明为

    52310

    彻底搞定C语言指针(精华版)

    在下篇谈谈“指 针的指针”即对int * * ppa;ppa 的理解。...二、函数 参数传递方式之一:值传递 1.值传递的一个错误认识 先看题一Exchg1函数的定义: void Exchg1(int x, int y)   //定义的x,y变量被称为Exchg1函数的形式参数...函数只是把a,b的值通过赋值传递给了x,y,函数里头 操作的只是x,y的值并不是a,b的值。这就是所谓的参数的值传递了。...如下: FunType FunP2; FunType FunP3; //…… 六 函数指针作为某个函数参数 既然函数指针变量是一个变量,当然也可以作为某个函数参数来使用的。...所以 ,你还应知道函数指针是如何作为某个函数参数传递使用的。

    96230

    令人疑惑的引用和指针

    double f = 1.024; int &g = f; //非法,类型匹配 而对引用赋值,实际上是值赋给了与引用绑定的对象,例如: int h = 1024; int &i =...正因如此,使用引用而非指针作为函数参数是一个不错的选择,因为引用永远不为空,函数入口也就不需要做过多的检查,引用也就更富效率。...a = 1024; int &ref = a; int *p = &a; ref = 10; //使用引用可直接使用,所绑定对象的值修改 *p = 11;//使用指针需要解引用 作为参数时的差别...指针作为参数时,看起来是地址传参,实际上仍然传值,即将指针的一个拷贝作为实参,而由于指针指向的是一个对象,因此在函数内可以实现对指针所指向对象的内容进行改变。...而引用作为参数时,实际上传递的对象本身,但又不需要拷贝,因为引用绑定的就是对象。 总结 从前面的内容来看,除了使用方法的差异意外,引用似乎像是弱化版的指针,是不是有点像指针常量呢?

    60420

    ECMA-262-3深入解析第八章:评估策略

    介绍 这篇短篇我们将会考虑一下在ECMAScript函数传递参数的策略。 通常,计算机科学的这部分被称为评估策略,即,一组用于评估某些表达式的语义的规则。函数传递参数的策略就是其中一种情况。...但是,为指针重新分配一个值仅仅只是把它重新绑定一个小的内存块,而不影响旧的内存块。仍然可以使用指针修改原始对象的属性。...可以看出,他们仅在分配语义上有所不同:”by reference“可以完全替换内容,而”by sharing“指针重新绑定新的对象。 实际上,C++的引用只是指针的语法糖。...分配仅参数名称重新绑定新的存储器,而保持原始对象不变。 但是正如我们更早提到的,此策略的通用“按值”术语可以在JS程序员中使用-再次表示指针的值。...与按引用策略相比,这是一个重要的区别,这正是对象也作为参数传递函数的方式。 一旦有了对象的地址,就可以更改其内容(更新的属性),这就是Mutation的操作。

    95410

    C++知识总结

    “引用”作为函数参数有哪些特点? (1)传递引用给函数传递指针的效果是一样的。...(2)使用引用传递函数参数,在内存并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数...因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。...(3)使用指针作为函数参数虽然也能达到与使用引用的效果,但是,在被调函数同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处...“引用”作为函数返回值类型的格式、好处和需要遵守的规则?

    1K40

    动态内存与智能指针

    定位new允许我们传递额外的参数new,在此例子我们传递一个标准库的nothrow 对象,告知它在内存不足的时候不要抛出异常。...我们可以智能指针绑定一个指向其他类型的资源的指针上面,但是为了这样做,必须提供自己的操作来代替delete 不要混合使用普通指针和智能指针。...,但这段代码不能使用delete来销毁这个指针所指向的对象 我们不能将get返回的指针再绑定另一个智能指针上。...虽然不能拷贝和赋值unique_ptr ,但是可以调用release或者reset指针的所有权从一个(非const)unique_ptr 转移给另一个unique_ptr reset 成员接受一个可选的指针参数...我们按照需要在此内存构造对象。 成员函数construct接受一个指向将要被构造的内存的指针,同时可以接受额外参数作为构造对象时的参数

    85220

    C++引用详解

    以前的C语言中函数参数传递是值传递,如果有大块数据作为参数传递的时候,采用的方案往往是指针,因为这样可以避免整块数据全部压栈,可以提高程序的效率。...(2)使用引用传递函数参数,在内存并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数...(3)使用指针作为函数参数虽然也能达到与使用引用的效果,但是,在被调函数同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处...(2)用引用传递函数参数,能保证参数传递产生副本,提高传递的效率,且通过const的使用,保证了引用传递的安全性。...流操作符>、赋值操作符=的返回值、拷贝构造函数参数赋值操作符=的参数、其它情况都推荐使用引用。

    1.3K50

    C++引用高级使用!

    以前的C语言中函数参数传递是值传递,如果有大块数据作为参数传递的时候,采用的方案往往是指针,因为这样可以避免整块数据全部压栈,可以提高程序的效率。...(2)使用引用传递函数参数,在内存并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数...(3)使用指针作为函数参数虽然也能达到与使用引用的效果,但是,在被调函数同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处...引用总结 (1)在引用的使用,单纯给某个变量取个别名是毫无意义的,引用的目的主要用于在函数参数传递,解决大块数据或对象的传递效率和空间不如意的问题。...(2)用引用传递函数参数,能保证参数传递产生副本,提高传递的效率,且通过const的使用,保证了引用传递的安全性。

    54320

    C++:引用及其应用

    引用 rInt 被重新赋值为 intTwo,但从控制台输出看,引用的绑定关系并没有改变,我们操作 rInt 仍然相当于在对 intOne 进行操作,而不是 intTwo,引用 rInt 的地址仍然与 intOne...我们学习过 C 语言知道,数组名本质是数组的首地址,是一个 const 型的指针,如果我们要对一个数组进行引用,那么意味着数组的每一个元素都要初始化为其他的内存实体,显然不现实;另一方面,数组名代表的是整个数组空间的起始地址...,但在调用引用传递函数时,可读性比指针传递更好,简单清晰。...解决办法之一就是用引用给函数传递你需要返回的参数,以下程序片段实现了函数返回多值 bool Factor(int,int&,int&); int main(){ //.....,在传递给 main 函数的变量 a;b 调用 func2 时,函数返回值直接作为引用 b 的初始化,不经过栈区创建临时变量,c 调用 func2 时,直接函数返回值传递给 c 变量,不经过栈区临时变量

    84310

    闰土说JS进阶之变量

    这里,我们就可以适当的总结一下,当一个变量复制另一个变量的引用类型值时,这个值的副本其实是一个指针,而这个指针则指向存储在堆的一个对象。复制操作结束后,两个变量实际上将引用同一个对象。...在ECMAScript中所有函数参数都是按值传递的,也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制另一个变量一样,原理是一样的。...在调用这个函数时,变量count作为参数传递函数,于是数值20被复制给参数num。...假如num是按引用传递的话,那么变量count的值也变成30,从而反映函数内部的修改。 当然使用数值等基本类型值来说明按值传递参数比较简单,但如果使用对象,那么问题就不那么浅显易懂了。...当接下来再访问person.name时,显示的值仍然是“runtu”。这说明即使在函数内部修改了参数的值,但原始的引用仍然保持不变。实际上当在函数内部重写obj时,这个变量引用的就是一个局部对象了。

    778100

    十三、异常、类型转换和 lambda

    noexcept noexcept 关键字用于指定一个函数抛出异常。如果一个标记为 noexcept 的函数尝试抛出异常,程序调用 std::terminate(),导致程序非正常退出。...例如,一个整数赋值给浮点数变量时,整数会被隐式转换为浮点数。...如果转换失败,转换结果将是一个空指针(对于指针)或抛出异常(对于引用)。它主要用于处理类的继承层次结构的向下转换(即基类派生类)。...它可以常量指针(或引用)转换为非常量指针(或引用),反之亦然。...parameters:参数列表,与普通函数参数列表类似,但也可以为空。 mutable:一个可选的说明符,用于指定lambda表达式体内的代码可以修改被捕获的按值传递的变量的值。

    6710

    C语言作业详解12_17(题型对应知识点)

    形参不能为表达式,在C语言中,形参可以是变量或指针,但不能是常量或表达式。形参用于接收函数调用传递的实际参数的值。 C、正确。实参可以为任意类型为形参传值,但要确保D的类型一致问题。 D、正确。...四、有返回值函数的使用 A、函数调用可以作为独立的语句存在,这表示我们可以仅仅调用一个函数接收其返回值。...B、函数调用可以作为一个函数的实参,这意味着我们可以一个函数的调用作为另一个函数参数传递。 C、函数调用可以出现在表达式,这意味着我们可以用函数调用的返回值参与表达式的运算。 D、错误。...函数调用虽然不能直接作为一个函数的形参,但可以定义函数指针作为形参,然后函数调用通过函数指针传递给该形参。 五、函数命名 A、错误。...但是,如果参数指针类型,那么实参和形参指向的是同一块内存地址,可以通过指针来修改实参指向的数据。但是,实参和形参仍然是独立的变量,它们在内存中分别占用不同的内存单元。

    10810

    C++中指针和引用的区别

    在C++指针和引用经常用于函数参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是 值传递的方式,它所传递的是一个地址值。...值传递过程,被调函数的形式参数作为被调函数的局部变量处理,即在栈开辟了内存空间以存放由主调函数放进来的 实参的值,从而成为了实参的一个副本。...值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。...而在引用传递过程, 被调函数的形式参数虽然也作为局部变量在栈开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。...而对于指针 传递参数,如果改变被调函数指针地址,它将影响不到主调函数的相关变量。如果想通过指针参数传递来改变主调函数的相关变量,那就得使用指向指针指针,或者指针引用。

    5K82

    一篇读懂 C 指针

    # 函数的形参声明 在 C 语言中,数组不能被整体操作,也就是说,不能直接一个数组赋值给另一个数组,或者数组作为参数传递给其他函数。那么,如果我们想把一个数组传递函数,该怎么做呢?...# 从函数返回多个值 C 语言的函数只能返回一个值,我们可以通过使用指针突破这个限制,实现从函数返回多个值的效果。具体做法是指针作为参数传递函数,让函数修改指针所指向的对象的值。...在上面示例,get_values 的参数的类型是“指向 int 的指针”,调用时仍然是值传递,只不过复制形参的值,是 a 和 b 的地址。...# 数组作为参数传递 在 C 语言中其实是不可以数组作为参数传递的,但是通过传递指向数组初始元素的指针,可以达到与传递数组相同的效果。...回想上一节介绍的,指针作为参数传递函数,在函数内部通过指针修改指向的值,达到从函数返回多个值的效果。

    11610

    C语言入门这一篇就够了(进阶篇)

    我举一个简单的C语言函数调用的示例: 在这个例子,我们定义了一个名为 add 的函数,该函数接收两个整数作为参数,并返 回它们的和。...例如: add(5, 3); 函数调用作为函数参数:可以把函数调用作为另一个函数参数。...下面是一个关于C语言指针的基本示例: 在这个例子,我们首先定义了一个整型变量a并赋值为5,然后定义了一个整型指针p。接下来,我们指针p指向变量a的地址。...指针在C语言中的用法非常灵活,可以通过移动指针来访问和修改内存的数据,也可以通过指针传递参数函数。...2.函数参数传递:可以指针作为参数传递函数,用于传递大容量数据或避免数据拷贝。 3.数组操作:通过指针可以方便地访问和操作数组元素,如遍历、查找、排序等。

    25730

    万字长文【C++】高质量编程指南

    ,应用引用传递的方式返回String 对象,如果用值传递的方式,虽然功能仍然正确,但由于 retuern 语句要把 *this 拷贝保存返回值的外部存储单元之中,增加了不必要的开销,降低了赋值函数的效率...(s1+s2); return temp; 上述代码发生三件事: 1,首先temp对象被创建,同时完成初始化 2,然后拷贝构造函数把temp拷贝保存返回值的外部存储单元 3,最后,temp在函数结束时被销毁...*),而不是p所指的内存容量 //当数组作为函数参数进行传递时,该数组自动退化为同类型的指针 void Func(char a[100]) { sizeof(a);//4 而不是100 } 8.2.4....指针参数如何传递内存 1,如果函数参数是一个指针,不要指望用该指针去申请动态内存。...编译器总是要为函数的每个参数制作临时副本,指针参数p的副本是 _p,编译器 使 _p =p,如果函数体内的程序修改了 _p的内容,就导致参数p的内容作相应的修改,这就是指针可以作为输出参数的原因。

    1.5K20
    领券