C 语言--函数指针形参

C语言 被调函数修改指针形参 我们都知道,如果想在函数中修改实参的值,那么,你传递给函数的应该是这个值的地址。如果你想修改的是个指针,那么是传递指针的地址(二级指针),还是传递该指针呢? 1. C语言中的函数调用 讲之前,先弄清楚一些概念:主调函数,被调函数,实参,形参。 void fun(int p) // p 是形参,是在fun()内使用的形式参数 { p = 12; } void fun2(int *parra... 阅读详情

C语言传值与传址

今天写代码,自以为只要是传递指针,就能达到自己的任何目的,比如说改变指针的所指向的内容。
一切看起来似乎很简单。

#include <stdio.h>

void test(char *des, char *src)
{
    des = src;
}

int main(void)
{
    char *src = "hello world!";
    char *des = NULL;
    test(des, src);
    return 0;
}

想法是:通过传值来改变指针des所指向的对象,使用函数更显紧凑,符合模块化编程。另外,如果可以的话,将test的返回值改为int,返回代码块 的错误码。这样的面向过程编程,没毛病。

现实是残酷的。
当程序运行到test的最后的括号时,打印出来两个函数中的des:

(gdb) p main::des
$2 = 0x0
(gdb) p test::des
$3 = 0x400604 "hello world"

说明,函数进行传参时,只是简单的将NULL传给了形参des,而形参des值的改变不会影响main::des;
那么,根据理论,要改变对象的值,就传递它的地址吧!

void test(char **des, char *src)
{
    *des = src;
}

int main(void)
{
    char *src = "hello world!";j
    char *des = NULL;
    test(&des, src);
    return 0;
}
(gdb) p &main::des
$3 = (char **) 0x7fffffffd5e8
(gdb) p test::des
$4 = (char **) 0x7fffffffd5e8
(gdb) p main::des
$5 = 0x4006a4 "hello world"
(gdb) p *test::des
$6 = 0x4006a4 "hello world"

总结

所有函数传参都是传递一份拷贝,那份拷贝在实参和形参是独立的,互不影响。
传递指针也一样,指针也是对象,传递的是指针中存的地址值;
想通过传参改变实参的值,需要传递你想改变的变量的地址,改变变量,只要得到其地址,就可以通过解引用来改变它,不管是int还是指针,都是一个道理

差分放大电路的计算 反馈,对于运算放大电路来说,运放工作在线性区,所以这里一定是负反馈,没有反馈(开环)或者是正反馈,那是比较器电路而不是放大电路,这时候运放工作在饱和区或称为非线性工作区,正因为饱和,输出才是电源电压的幅值。图2是一种带正反馈的运放电路,这里就不能叫运算放大电路了,因为运放的开环放大倍数理想是无限大,当然实际中不可能无限大,所以如下结构是迟滞电压比较器,运放工作在非线性区或饱和区。实际应用电路中,我们为了简化计算,也是用最简方法计算,经常使用的电路也是上述电路,令电阻相等关系,简化计算。 阅读详情

相关推荐

【一】Android MediaPlayer整体架构源码分析 -【初始化和创建】

本系列文章分析的安卓源码版本:【Android 10.0 版本】 一、MediaPlayer的简单调用关键流程 【这只是一个简单使用过程示例】 // 此处变量声明省略 private void play() { // 先获取SurfaceHolder mSurfaceView = findViewById(R.id.surface_view); mSurfaceHolder = mSurfaceView.getHolder(); mSurfac

CloverLHao的博客 4347

C语言:通过指针传递参数

#include<stdio.h> void swap(int *a,int *b); //声明函数 int main() { int i=5,j=10; //初始化整数...

Yummy的博客 3756

GK2302量产工具下载方法,GK2302开卡教程,GK2301LT怎么开卡方法,附GK2302开卡工具,GK2301LT量产软件下载

​每种量产软件的操作流程可能略有不同,因此必须按照要求操作。为确保安全,建议使用量产部落网下载的原版量产开卡软件。

A520091000的博客 2128

函数指针作为某个函数的参数及定义函数指针(回调函数)

转载于:http://blog.youkuaiyun.com/vlily/article/details/7244682 一、 定义某一函数的指针类型: 就像自定义数据类型一样,我们也可以先定义一个函数指针类型,然后再用这个类型来申明函数指针变量。 我先给你一个自定义数据类型的例子。 typedef int* PINT;    //为int* 类型定义了一个PINT的别名 int main(

谁de如花的博客 3万+

ACM算法模板 · 一些常用的算法模板-模板合集(打比赛专用)

萌新常用的都在这了,本萌新的模板集。

张天枭の博客 5万+

关于旋转矩阵的左乘与右乘问题

最近在阅读框架源码时被旋转矩阵左乘右乘绕的云里雾里,故写下一篇记录一下,以防自己不长记性。

菜鸡正在学习 1万+

c语言形式参数作用是什么,C语言中指针的形式参数和实际参数

C语言的形式参数和实际参数变量:声明变量时,系统将为您分配一块内存,并且该内存还将有一个地址;是全局变量还是局部变量,范围和生命周期可能不同,只有类型不同,基本属性相同,才是变量;没有所谓的指针变量c语言中 实参与对应参,但是此变量的类型是指针. 他还分配了一块内存,有自己的地址,长度为int,但他的数据是某个块的地址;因此,如果要通过参数修改数据,则只能传入变量的地址,然后函数主体获取相应的地址...

weixin_29889741的博客 2226

Cibersort免疫浸润 --- 详细教程

免疫浸润是指免疫细胞如淋巴细胞、浆细胞、巨噬细胞等进入到组织或器官中,并在这些组织或器官中发挥免疫功能的过程。免疫细胞的浸润可以是炎症反应的一部分,也可以是针对感染、肿瘤或其他疾病的免疫应答的一部分。免疫浸润通过调节免疫反应和炎症反应的程度和类型,起到维护机体免疫平衡和清除异常细胞或病原体的作用。在某些情况下,免疫浸润可能导致炎症反应过度,引起组织损伤,例如自身免疫性疾病。因此,免疫浸润在许多疾病的诊断和治疗中都具有重要的意义。免疫浸润可以通过组织切片染色和免疫组织化学等方法观察和分析。

ZxVSaccount的博客 9109

C语言-函数指针,指针与函数传参

1.函数指针 (1)函数指针的实质(还是指针变量) ->函数指针的实质还是指针,还是指针变量。本身占4字节(在32位系统中,所有的指针都是4字节) ->函数的实质是一段代码,这一段代码在内存中是连续分布的,所以对于函数来说很关键的就是函数中的第一句代码的地址,这个地址就是所谓的函数地址,函数指针就是指向这个地址。 (2)函数指针的书写和分析方法 ->C语言本身是强类型语言(每一个变量都有自己的变量类型),编译器可以帮我们做严格的类型检查。 ->假设我们有个函数是:vo

weixin_49303682的博客 3361

Open3D KD-tree的使用【2025最新版】

Open3d使用FLANN构建KDTree以便进行快速最近邻检索。博客长期更新,本文最近一次更新时间为:2025年1月1日,代码已同步更新至Open3D 0.18.0版本。

点云侠的博客 40万+

实现端到端加密的WebRTC视频会议终端

需要注意的是,上述示例代码中没有涉及到具体的加密算法和密钥交换过程,而是通过WebRTC API自动处理了加密和密钥交换的细节。然后,我们通过信令服务器将本地SDP发送给对方,并接收对方的SDP。最后,我们将对方的SDP设置为远程描述,并将最终的连接建立起来。最后,我们将对方的SDP设置为远程描述,并建立最终的连接。在本文中,我们将探讨如何使用WebRTC构建一个加密的视频会议终端,并提供相应的源代码。在本文中,我们将探讨如何使用WebRTC构建一个加密的视频会议终端,并提供相应的源代码。

WaJulia的博客 434

c语言函数作为形参的注意事项

【代码】c语言函数作为形参的注意事项。

笔记 1094

FM20S用户手册--Linux系统启动卡制作及系统固化

评估板出厂时,默认提供一张配套的Micro SD卡,此卡为可正常使用的Linux系统 启动卡。评估板断电,将Linux系统启动卡插入评估板Micro SD卡槽,根据评估底板丝印将 启动方式选择拨码开关拨为1010(1-4).此档位为Micro SD启动模式。使用Linux 系统启动卡启动系统时,将使用此目录的BOOTbn文件启动FSBL和U-Boot。Linux系统启动卡制作时,已将固化系统的脚本文件mkemmcboot.sh拷贝至Linux系 统启动卡文件系统的"/opt/tools/"目录下。

创龙,嵌入式一体化解决方案商 302

C语言关于传入子函数的指针形参的地址改变

C语言关于传入子函数的指针形参的地址改变,自己的一些思考。

CaptainUniverse_的博客 2745

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

函数指针形参

一、在介绍指针形参之前,先简要说明下两个运算符 & 和 *。 1、取址运算符 & 用来取得其操作数的地址。取址运算符的操作数必须是在内存中可寻址到。换句话说,该运算符只能用作函数或对象(例如左值),而不可以用于位字段,以及那些未被存储类型修饰符register声明的内容。 float x, *ptr; ptr = &x; // 合法:使得指针p...

spdian的博客 5238

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C语言之指针与函数

今天给大家介绍【指针与函数】,闲言少叙,开始了! 【指针能否作为函数的形式参数?】 其实指针是可以作为函数的形式参数的,我们使用指针形参,实际上是传地址到函数中(注意,是传地址喔!) ●普通的形参,只是将实参的值传入函数; ●指针形参,将实参的地址传入函数; void function1(int *p1,int *p2)//形式参数 1.我们注意星号表示这个地方是传进来的是一个指针,要与普通的形...

Serendipper_constancy的博客 482

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C语言函数传参-数组形参和指针形参

C语言函数传参,数组传参和指针传参,传数组函数形参应该用什么接收,函数是指针的情况下可以接收什么样的实参。

如果这是最后一页 能否让我把故事重写 288

C语言复习——一个有意思的使用指针形参的函数

因为因为++与*运算优先级是同等的,但结合律是从右往左的,故会先进行start++,再进行*start。简单讲,指针先指向后递增,等同于*(start++)。另外采用*start++意味着会先把指针指向位置的值加到total上,再递增指针。若采用*++start,则反过来,先递增指针的,在使用指针指向位置上的值加到total上。(*start)++则表示指针指向的值进行递增。注意,只有当start为指针变量时,才有start++这样的表达式。另外,数组与指针是相互联系的,可以相互替换的。

专注嵌入式~ 233

【C语言】C语言中的指针1

指针 指针指的是地址 一个指向变量的指针就是该变量的地址 指向什么类型的变量,这个指针就是什么类型的 通过指针,也就是地址能够帮助我们直接访问变量的值,同时指针能够让我们对内存进行操作,通过改变内存地址来实现一些算法和功能 ...

weixin_45709330的博客 502

c语言形参指针 实参数组,《C语言程序设计》中的指针形参和函数体中数组实参问题的教学研究.pdf...

《C语言程序设计》中的指针形参和函数体中数组实参问题的教学研究.pdfCC《CC语言程序设计》中的指针形参和函数体中数组实参问题的教学研究山东理工大学计算机学院 董敬富 淄博市劳动局职业技能鉴定中心 董京亮摘要:指针是C 语言中一个重要的概念,也是C语言中一个重要的特色。正确而灵活地运用指针可以提高程序的运行速度和降低程序的存储空间。在构造链表、树、图等复杂...

weixin_32243075的博客 289

C语言指针函数细腻处

(从 0x1000 改为 0x2000),不影响 main 中的 p。int (*p)[10]: 数组指针,指向包含10个整型元素的数组。sizeof(str): 包含’\0’的字符数组大小,6字节。int *p[10]: 指针数组,包含10个指向整型的指针。函数返回后,q 的内存(0x2000)被释放(栈帧销毁),是等价的,p[1] 本质是 *(p + 1) 的语法糖。int **p: 指向整型指针的指针(二级指针),修改指针p的指向不影响main中的p。int *p: 指向整型的指针。

谈笑有鸿儒 往来无白丁 531

C/C++丨指针与引用学习笔记

《C 语言程序设计(第三版)》中国铁道出版社 第六章 指针与引用 粗糙笔记~ (本人的相关作业代码放在了github)

TheSumSt的经验站 1109

c语言初学-初涉指针

指针:     指针是一个 4 bytes Integers,保存的是内存地址,     1.定义:       类型 * 变量名:      int * p;这样定义的话,p是有地址也有值,不过值是随机值     应该为其初始化: int * p = null;     不提倡不同类型的一起运用:            char c = 'e';            in

1504

c语言 实现参数值双向传递,基于C语言函数参数传递规律的探讨

摘 要:函数是C语言的基本单位,函数的参数传递采用单向的值传递方式。当指针作为函数参数时,进行的是地址传递,地址传递依然是单向的值传递方式,并不是双向的传递方式。使用局部变量的有关知识,用图示法分析探讨函数的各种参数传递形式,通过探讨,总结了函数的参数传递规律。图示分析方法是一种全新的分析工具,有一定的推广价值。关键词:值传递;地址传递;局部变量;图示法中图分类号:TP311 文献标识码:B 文章...

weixin_42437253的博客 3131

c语言学习(一){数组与指针的一些注意事项}

本周开始了数组的学习。 感觉数组与指针有一些地方类似。这里我们可以看定义; c语言中,在函数体或在函数外部定义的数组名可以认为是一个存放地址值的指针变量名,其中的地址值是数组第一个元素的地址。也就是数组所占一串连续存储单元的起始地址。 所以来说,我们可以这样看 a[10];这是一个数组。同时,a也可以看作是一个指针变量。*a即指向数组的第一个元素。 #include <std...

补不补布(jianggogogo)的博客 611

C语言------------指针形参

由上图可以更加直观的看到指针形参与实参之间的关系,当实参(&a,&b)传入函数时函数会开辟一个新的存储空间去存储a,b地址,并将该参数命名为a,b(本质上是一个指向char类型的指针,分别指向实参a,b),而swap函数本质上就是改变了这两个指针指向的存储空间内的值 (而具体大小则是看指针指向对象的数据类型例如本例中的char),从而达到了实参中两者存储内容的交换的目的。本篇将对C语言中一级指针以及二级指针作为函数形参的情况进行对比,从而加强对指针作为函数形参的的理解。

m0_54219886的博客 801
上一篇: Labview波形生成器的设置
下一篇: C 语言--运算符优先级
AdmireLinux
博客等级 码龄11年 6粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值