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

在作为指针传递的函数内部赋值?

在编程中,当我们将一个指针作为参数传递给一个函数时,我们可以在函数内部修改指针所指向的内存地址的值。这样,在函数执行完毕后,原始指针所指向的内存地址的值也会被修改。

例如,以下是一个使用C语言编写的简单示例,演示如何在作为指针传递的函数内部赋值:

代码语言:c
复制
#include<stdio.h>

void assign_value(int *ptr, int value) {
    *ptr = value;
}

int main() {
    int num = 0;
    assign_value(&num, 5);
    printf("The value of num is %d\n", num);
    return 0;
}

在这个示例中,我们定义了一个名为assign_value的函数,它接受一个整数指针和一个整数值作为参数。在函数内部,我们使用*ptr = value语句将指针所指向的内存地址的值设置为value

main函数中,我们定义了一个名为num的整数变量,并将其地址传递给assign_value函数。在函数执行完毕后,num的值将被修改为5。

这种在作为指针传递的函数内部赋值的方法,是一种常见的编程技巧,可以用于修改函数外部的变量或数据结构。

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

相关·内容

【C 语言】指针间接赋值 ( 指针作为 函数参数 意义 | 间接赋值 代码示例 )

文章目录 一、指针作为 函数参数 ( 间接赋值 ) 意义 二、间接赋值 代码示例 一、指针作为 函数参数 ( 间接赋值 ) 意义 ---- 调用函数时 , 调用 & 取地址 生成 实参 p , 将...指针变量 p 实参 传递函数形参 , 函数中 借助传入 指针 可以 实现 与 外部函数 内存共享 , 函数中使用 *p 修改内存值 , 可以将 运算结果通过 *p 传递出来 ; 指针 作为...才能实现 接口封装与设计 , 进而实现了 模块划分 , 最后实现了 软件分层 ; 使用 指针 ( 一级指针 或 多级指针 ) 作为参数 , 可以更加灵活 函数中 对 传入 指针 指向内存数据...进行处理 , 这些修改 , 可以保留到函数值返回之后 , 这些参数都可以作为返回值使用 ; 使用 指针 ( 一级指针 或 多级指针 ) 作为参数 , 实现了 main 函数 , 与 其它 子函数 之间...解耦操作 , 实现了 模块化开发 ; 如果没有 指针 作为函数 , 就无法实现 功能分层 , 无法实现 模块化开发 , 就无法实现 接口 封装 与 设计 ; 二、间接赋值 代码示例 ---- 代码示例

1.2K10

【C 语言】指针间接赋值 ( 直接赋值 和 间接赋值 | 函数中间接赋值 )

文章目录 一、直接赋值 和 间接赋值 二、函数中间接赋值 一、直接赋值 和 间接赋值 ---- 函数内部 , 声明普通变量 , 直接赋值 : 直接修改该变量 , 称为 直接赋值 ; 简介赋值...: 将该变量地址 赋值指针 , 通过 指针 修改内存中变量数据 , 称为 间接赋值 ; 代码示例 : #include #include int main...: 二、函数中间接赋值 ---- 函数内部 , 声明普通变量 , 如果 获取该变量地址 , 将该 地址 传递函数形参 , 在外部函数中 , 通过指针地址 , 修改内存中数据 ;...这同时也是 参数 作为 返回值 原理 ; 代码示例 : #include #include /* * 函数中, 将传入 p 指针指向地址 * 对应..."a = %d\n", a); // 调用 modify_a 函数 , 函数中修改 a 变量值 modify_a(p); // 第四次打印 a 变量值 printf

3.4K10
  • c语言函数指针用法_函数指针作为形参

    接着看下面这个函数声明: int *fun(int x,int y); 这和上面那个函数唯一区别就是函数名前面多了一个*号,而这个函数就是一个指针函数。...不过也可以将其返回值定义为 void*类型,调用时候强制转换返回值为自己想要类型,如下: //指针函数 Data *f(int a,int b){ Data * data = new...声明格式:类型说明符 (*函数名) (参数) 如下: int (*fun)(int x,int y); 更详细函数指针三种写法介绍,由于内容过多,整理另一篇博文中:https://blog.csdn.net.../weixin_45525272/article/details/118711459 函数指针是需要把一个函数地址赋值给它,有两种写法: fun = &Function; 或者 fun = Function..." << (*fun)(5,3) << fun(5,3); return a.exec(); } 输出如下: (*fun)(1,2) = 3 (*fun)(5,2) = 2 2 上面说到几种赋值和调用方式我都分别使用了

    62920

    【C语言笔记】函数指针作为函数参数

    函数指针有两种常用用法,一种是作为结构体成员,关于函数指针作为结构体成员用法可移步至上一篇【C语言笔记】函数指针作为结构体成员进行查看。另一种是函数指针作为函数参数。...这一篇分享函数指针作为函数参数。 一、函数指针作为函数参数 函数指针可以作为一个参数传递给另一个函数。这时函数指针使用就像普通常量和变量一样。...当函数指针作为参数传递时候,这时接收参数传递函数通常需要根据这个指针调用这个函数作为参数传递函数指针通常表示回调函数(Callback Functions)。 1、什么是回调函数?...回调函数就是一个通过函数指针调用函数。如果你把函数指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向函数时,我们就说这是回调函数。 2、回调函数实际中有什么作用?...其关键在于函数指针comp指向函数具体实现。 二、举例说明 上一节我们使用函数指针作为结构体成员来实现四则运算,这里一节我们稍微修改一下代码,使用函数指针作为函数参数来实现四则运算。

    10.2K12

    golang函数参数中接口指针传递

    其实是一个很简单问题,但是如果是之前一直写go的话可能没有意识到指针本质,就走不出来了。 最近写代码时候遇到了一个问题:有一个功能需要使用一个接口,有多个结构体实现了这个接口(经典OO场景)。...由于要和原有代码兼容,希望这个代码尽量表现与原来一样。 一个小demo,直接返回interface值来完成传递。看着很正常,但是因为是传值,所以与原有代码不太一致,也不够直观。...get Name after set var a testA setsetName(&a,"test") fmt.Println(a.getName()) */ } 但如果试图使用接口直接作为函数参数时候...=&t地方会报错:Cannot use '&t' (type *testDouble) as type *tt,非指针情况下会报错Cannot use 't' (type testDouble) as...type *tt 这里比较让人迷惑地方在于,interface tt = testDouble是很容易成立(编译器支持),可是指针层面却并不像想象中这样继续支持,强制转换也是不行

    2.3K40

    【C 语言】指针间接赋值 ( 直接修改 和 间接修改 指针变量 值 | 函数中 间接修改 指针变量 值 | 函数中 间接修改 外部变量 原理 )

    文章目录 一、直接修改 和 间接修改 指针变量 值 二、函数中 间接修改 指针变量 值 三、函数中 间接修改 外部变量 原理 一、直接修改 和 间接修改 指针变量 值 ---- 直接修改 指针变量...值 , 就是为其赋值一个地址值 , 使用 & 取地址符 , 将变量地址赋值指针变量 , 或者使用 malloc 函数分配内存赋值指针变量 ; // 将变量地址赋值给一级指针 p...return 0; } 执行结果 : 二、函数中 间接修改 指针变量 值 ---- 函数 中 间接修改 指针变量 值 , 将 指向一级指针 二级指针 变量 , 传递函数形参 中 ,... 函数中 , 使用 * 符号 , 修改 二级指针 指向 一级指针 变量值 ; 注意 : 如果要 修改 一级指针 值 , 必须 传入 指向 一级指针 二级指针 变量 才可以 , 传入一级指针变量...三、函数中 间接修改 外部变量 原理 ---- 如果要 修改 一级指针 值 , 必须 传入 指向 一级指针 二级指针 变量 才可以 , 传入一级指针变量 , 不能修改一级指针变量值 ; 这是因为

    21.2K11

    C语言函数传递指针理解以及二重指针使用

    C语言函数传递指针理解 传递参数时会生成一个复制指针,该指针指向位置与 原指针指向位置相同; 即b自身在计算机地址与a地址不是相同,这时你函数体内修改a指向位置,一定不会修改b指向位置...如下面这个方法 void test(int *a){ int l=2; a=&l; } 此时 修改之后 那么想要修改b指向怎么办,很简单,就是将b计算机存储地址传递过来,那么怎么传递呢...,这时候就要使用双重指针了,修改为下面的方法 void test(int **p){ int l=2; // *p代表b指针地址指向内容,就是b指针存储内容,也就是1地址...*p=&l; } main方法 int *b=(int *)malloc(sizeof(int)); *b=1; //传递b指针地址 test(&b); printf("%d",*b); } 此时传递过程...此时p2存储就是b指针地址,*p2指向就是b指针单元,这时候修改*p2内容就是修改外部b指针指向内容

    21510

    【C 语言】多级指针 ( 函数中生成 二级指针 | 通过传入 三级指针 进行间接赋值 )

    文章目录 前言 一、函数中生成 二级指针 ( 通过传入 三级指针 进行间接赋值 ) 二、完整代码示例 前言 如果要 通过 函数形参 间接赋值 修改 n 级指针, 需要向函数中传入 n + 1...级指针 形参 ; 一、函数中生成 二级指针 ( 通过传入 三级指针 进行间接赋值 ) ---- 通过 函数 形参变量 , 间接赋值 返回 生成 二级指针 函数 ; 如果要生成一个 二级指针 ,...进行赋值 ; 代码示例 : /** * @brief 生成二维指针 * @param num * @return */ int generate_memory(char ***p3, int...== NULL) { return -1; } // 遍历 二维指针 指向多个 一维指针 // 并为每个 一维指针 堆内存中 分配 20 字节内存...指向多个 一维指针 // 并为每个 一维指针 堆内存中 分配 20 字节内存 for(i = 0; i < num; i++) { // 为每个字符分配 20

    1K10

    指针函数作用

    传递地址 指针传递地址时,指针变量产生了副本,但副本与原变量所指内存区域是同一个。对指针副本指向变量进行改变,就是改变原指针变量所指向变量。 指向函数指针 指针变量也可以指向一个函数。...一个函数在编译时被分配给一个入口地址,这个函数入口地址被称为函数指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。...一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针数据,即地址。其概念与以前类似,只是带回类型是指针类型而已。返回指针函数简称为指针函数。...pfun是指向avg函数函数指针,调用pfun函数指针,就和调用函数avg一样。...从函数中返回指针 当我们定义一个返回指针类型函数时,形式如下: int *fun(参数列表) { ……; return p; } p是一个指针变量,它可以是形式如&value地址值。

    2.8K20

    答网友问:golang中slice作为函数参数时是值传递还是引用传递

    今天有网友问通道和切片在赋值给另一个变量或作为函数参数传递时候是不是引用传递?因为老师讲解时候说是指针传递? 先说结论:Go语言中都是值传递,没有引用传递。...("a", a) b := a b[0] = 10 fmt.Println(a,b) } 该示例是将a赋值给b。...如下: slice底层结构其中一个实际上是有一个指针,指向了一个数组。...那么,把a赋值给b时候,只是把slice结构也就是Array、Len和Cap复制给了b,但Array指向数组还是同一个。所以,这就是为什么更改了b[0],a[0]值也更改了原因。...另外,Go中还有chan类型、map类型等都是同样原理。所以大家一定不要混淆。

    68120

    【C++】STL 算法 ③ ( 函数对象中存储状态 | 函数对象作为参数传递时值传递问题 | for_each 算法 函数对象 参数是值传递 )

    文章目录 一、函数对象中存储状态 1、函数对象中存储状态简介 2、示例分析 二、函数对象作为参数传递时值传递问题 1、for_each 算法 函数对象 参数是值传递 2、代码示例 - for_each...二、函数对象作为参数传递时值传递问题 1、for_each 算法 函数对象 参数是值传递 下面开始分析 for_each 函数函数对象 作为参数 具体细节 ; for_each 算法调用代码如下...是一个 值 , 不是引用 ; 传递是 引用 的话 , 那么 外部对象 和 实参值 是相同对象 ; 传递是 值 的话 , 那么 实参 只是 外部对象 副本值 , for_each 函数中..., 这个函数对象 保留了 内部 函数对象参数副本 状态值 ; 2、代码示例 - for_each 函数 函数对象 参数在外部不保留状态 如果 for_each 算法中 调用了 函数对象 , 函数对象中...有 状态改变 ; for_each 算法 外部 继续调用该 函数对象 , 由于 for_each 是 值传递 , 传递 只是 函数对象副本 , 副本 状态改变 不会影响到外部函数 ; 在外部调用

    17410

    结构体类型数据函数之间传递

    结构体类型数据函数之间传递 函数之间不仅可以使用基本数据类型及其数组参数进行数据传递,也可以使用结构体类 型及其数组参数进行数据传递传递方式与基本数据类型参数是相同。...结构体变量函数之间传递数据 使用结构体类型変量作为参数进行函数之间数据传递时,注意以下问题 (1)主调函数实参和被调函数形参是相同结构体类型声明变量。...(3)结构体变量也可以作为函数返回值,使用 return语句从被调函数返回一个结构体变 量值。 例:定义结构体类型表示圆,定义函数计算一个圆面积并返回结构体变量。...,main函数实参c1把它传递函数getarea形参c,函数运行过程中计算并修改了c成员area值。...由于参数单向传递,形参c变化没有影响实参c1。函数 getarea把形参c作为返回值,main函数中把返回值赋给了变量c2。

    2.1K10

    java栈与堆区别,队列,数组,链表集合介绍,java 参数传递是值传递,数组和String作为参数传递区别,string赋值方式区别

    b引用,但是栈中已经有了一个字面值为3地址,所以会出现a和b同时指向3情况. java把内存分为两部分,一部分栈内存,一部分是堆内存,函数中定义一些基本类型变量和对象都是栈内存中分配,当在一段代码块定义一个变量时...arraylist,linkedlist,vector,stack, java 参数传递是值传递还是引用传递,数组和String作为参数传递区别: 总结一下几点:1:Java参数传递方式只有一种,就是按值传递...如果没有4就创建4,把4地址赋值给a。 上图就是,栈中创建一块变量为a区域并为其非配地址,然后指向4....右边是堆中创建一块局域存放新对象dog,然后看左边是栈中创建变量为dog引用地址,赋值后执行堆中创建dog区域。...其实它是堆内存中有个aa,然后栈a变量引用地址指向它,如下: 当string变量作为参数传递时, String a=”a”; f(a); public void f(String b){ b

    1.5K20

    动态规划问题-LeetCode 120(动态内存传递函数指针,DP)

    定义函数指针函数声明有些类似,但有一点不同,函数指针中,函数名为一个指针变量,如下例子中(*p[2])为一个函数指针数组, 其中p[0] = &max, 相当于对max函数取别名!...】 在下面例子中,其中GetMemory1函数中出现了指针作为函数参数进行传递形式!...而指针传递和其他非引用传递一样,都会将实参拷贝出来一份进行传递,因此函数中形参改变,而实参不改变!...解决这个问题方法有三种: 使用指针指针,char **p C++中有了引用符号,因此也可以对指针类型进行引用传递,char* &p 可以利用函数返回值来进行传递(注意返回值是堆区还是栈区!).../} 这种写法错误,指针传递属于非引用传递,故函数指针实为拷贝后完全不同指针 void GetMemory2(char** p, int num) { *p = (char*)malloc

    70610

    如何优雅传递 stl 容器作为函数参数来实现元素插入和遍历?

    ,直接使用 std::vector 这个容器作为参数(有的人可能觉得我多此一举,直接在函数里访问 m_svrmsgs 成员不就行了,为什么要通过参数传递呢?...于是自然而然想到,我们这里能不能声明 back_inserter 作为输入参数呢?...return -1; 34 } 35 36 return ret; 37 } 38 } 其实核心就是一句对 back_inserter 赋值语句...结语 其实本文讲解了一种通用通过 iterator 读取容器、通过 inserter 插入容器元素方法,这种方式较之直接传递容器本身“优雅”不少,虽然不能实现 100% 无缝切换容器,但是也提供了极大灵活性...特别是还研究了如何将这种方式实现模板函数不同文件中分别声明与实现,达到解除代码耦合目的,具有较强实用性。

    3.7K20

    C语言函数传递指针,值没有被修改原因及解决方法

    C语言函数指针参数值为什么不变C语言函数传递指针作为参数,确切来说是传递了指向变量内存地址作为参数,可经过函数修改之后,该指针指向变量值为什么不会被修改?...就像下方这个函数:void test(int *x){ *x++;}这是为什么呢?...这个跟运算符优先级也没有关系,像上面这样*x++表达式中,并不会被优先计算x++,即不会先进行内存地址自增运算。下面的实例中将探讨这一点。...实例代码该实例输出了三个变量内存地址,前两个是一样,即通过*x++运算,变量指向内存地址并没有发生改变,但是如果是通过指针自增运算,比如z++,则内存地址会发生改变。...):61fe1461fe1461fe18解决方法将x++修改为:x = *x + 1;原文:C语言函数传递指针,值为什么没有被修改免责声明:内容仅供参考,不保证正确性!

    39621

    C++ this指针:用于成员函数中指向调用该函数对象

    一、定义和使用this指针 this指针成员函数内部定义一个常量指针。它存储了当前对象地址,可以通过它访问当前对象成员变量和成员函数。...函数内部,返回是指向调用该函数对象指针。...这里使用了*this来访问调用该函数对象。 三、作为函数参数this指针 this指针也可以作为函数参数传递。这种情况下,可以函数内部访问其他对象成员变量和成员函数。...getName函数内部,使用了this指针访问调用该函数对象成员变量name。...四、总结 this指针C++中是一个非常重要概念,可以用来访问调用该函数对象,作为返回值返回,或者作为函数参数传递。掌握this指针使用可以帮助我们更好地编写面向对象程序。

    24840

    【Groovy】Groovy 方法调用 ( Groovy 构造函数中为成员赋值 | Groovy 函数参数传递与键值对参数 | 完整代码示例 )

    文章目录 一、Groovy 构造函数中为成员赋值 二、Groovy 函数参数传递与键值对参数 三、完整代码示例 一、Groovy 构造函数中为成员赋值 ---- Groovy 类没有定义构造函数 ,...与 成员值对应即可 ; 个数随意 : 成员个数随意 , 可以为所有的属性赋值 , 也可以只为其中部分属性赋值 ; 如下代码 : class Student { def name def..., ${student3.age}" 执行结果为 : student : Tom , 18 student2 : Jerry , 16 student3 : Jim , null 二、Groovy 函数参数传递与键值对参数...---- Groovy 构造函数中 , 可以使用 成员名1: 成员值1, 成员名2: 成员值2 类型参数 , 这是键值对 map 类型集合 ; 但是对于普通函数 , 不能使用上述格式 ,...println "${a}, ${b}" } } 如果使用 student.printValue(a: “Tom”, b: 18) , 就会报错 , 提示只传入了一个 map 集合作为参数

    9.2K20

    结构变量作为方法参数调用,方法内部使用“坑”你遇到过吗?

    很久没有写博了,今天一个同学问结构变量问题,问结构到底是传递值还是传递引用。查过MSDN都知道,结构默认是传递,因此方法内部,结构值会被复制一份。...一般来说,数组参数传递是引用,那么数组元素呢?它是被复制还是被引用?如果结构数组元素象结构变量那样也是复制,那么对于方法调用内存占用问题,就得好好考虑下了。...TestStruc2(ref p); Console.WriteLine("call by ref Point X={0},Y={1}", p.X, p.Y); 调用结果符合预期,以引用传递结构变量...Console.WriteLine("call by value Point[0]: X={0},Y={1}", arr[0].X, arr[0].Y); 结果: call by value Point[0]: X=1,Y=2 方法内部对结果数组元素改变无效...Point p = arr[0]; p.X++; p.Y++; } 这说明,定义一个结构变量,让另外一个结构变量赋值给它

    2.5K100
    领券