C语言参数传递——值传递与地址传递

值传递和引用传递 值传递和引用传递是函数参数传递的两种类型,一般而言,基本数据类型都是值传递,数组和对象采用引用传递减少对象复制开销,但也有特例。 阅读详情
AI摘要

本文通过实例详细解析了C语言中的参数传递方式,包括值传递、地址传递及数组作为参数的情况,并对比了不同方式下变量的变化。

最近开始复(yu)习(xi)C语言,看到参数传递这里,又遇到了以前一直没有搞清楚的一个问题,我相信这个问题大家许多初学者也会遇到过,就是C语言函数的参数传递方式。
C语言中参数的传递有两种方式:
1)值传递
2)地址传递
3)数组作为函数参数
这里用两个例子来说明这两种方式的区别。

  • 值传递
int main(){
    int a=3;
    int b=4;
    printf("初始值a=%d,b=%d\n",a,b);
    exchange(a,b);
    printf("运行后a=%d,b=%d",a,b);
    return 0;
}
void exchange(int a ,int b){
   int temp;
   temp=a;
   a=b;
   b=temp;
}

运行结果:这里写图片描述

  • 地址传递
int main()
{
    int i,j,k;
    int data[100];
    int length=3;
   int a=3;
    int b=4;
    printf("初始值a=%d,b=%d\n",a,b);
    exchange(&a,&b);
    printf("运行后a=%d,b=%d",a,b);
}

void exchange(int  *a ,int *b){
    int temp;
    temp =*a;
    *a=*b;
    *b=temp;
}

运行结果:这里写图片描述

why?
老生常谈的问题了,我们预期的是ab的值会交换,但是并没有达到预期的效果,因为这个函数使用的是值传递。
我个人是这样的理解的
main函数中声明的ab两个变量,看作是计算机中的两个盘子A,B。A盘子中放的是“3”,B盘子中放的是“4”。
值传递的方式,只是把两个盘子中的东西作为参数传入,起到的是一种模板作用,函数收到这两个参数之后,会找到另外两个跟“3”“4”一样的东西,对这两个东西进行操作。而并不会改变main中原来两个盘子的值。而地址传递,就是把A,B这个两个盘子作为参数传过去了,进行的操作会影响到这个盘子里的东西。
换言之,我们去饭店点菜,有时大厅中能看到保鲜膜裹着的样品菜,我们指着桌上盛放“鱼香肉丝”的盘子告诉服务员我们要这个菜,厨师会另取相同的食材做出我们点的“鱼香肉丝”,而原本放在大厅里的样菜并没有动。----这是值传递。
相反,我们跟服务员说,我们就要这个盘子里的菜,这样厨师就直接烹饪了我们指定的盘子里的菜。----这是地址传递。

另外还看到一种引用传递,是c++语言中参数的传递方式,声明格式如下

void exchange(int &a,int &b){
/*操作*/
}

另外需要注意的是,C语言中使用地址传参,声明的格式是void function(int *a)
而调用的格式是:function(&a)
因为传递的参数是地址,所以在调用时候要有“&”取地址符号!

  • 数组作为函数参数
    1)数组元素作为函数参数,函数的声明没有什么差别,还是分为上述的两种方式:void function(int a);//值传递或者是void function(int *a);//地址传递,调用函数时分别采用function(a[2]);或者function(&a[2]);这种情况下,存在值传递与地址传递的不同,参考上述。
    2)数组名作为参数传递:
    例如function(int a[])
    调用函数:function(a);//这里a是一个数组名字
    用数组名做函数实参时,不是把数组元素的值传给形参,而是把实参数组的首元素的地址传递给形式参数,也就是说形参数组发生改变,会使实参数组发生同样的变化。换言之,函数进行的操作就是直接发生在传递进来的数组上的。
    下面举一个例子,对数组a中的数字进行排序
#include stdio.h
int main()
{
    int i;
    int n=6;
    int a[6]={7,5,3,4,12,54};
    for(i=0;i<n;i++) printf("%d ",a[i]);
    printf("\n排序之后\n");
    Sort(a,n);
     for(i=0;i<n;i++) printf("%d ",a[i]);
    return 0;
}

void Sort(int a[],int n){
    int i,j;
    int tmp=0;
    for(i=0;i<n;i++){
        for(j=0;j<n-1-i;j++){
            if(a[j]>a[j+1]){
                tmp=a[j];
                a[j]=a[j+1];
                a[j+1]=tmp;
                }
        }
    }
}

运行结果:这里写图片描述

可以看出,函数名作为参数时,所做的操作会直接影响原来的数组。

C专家编程--指针和数组(三) 值传递 指针传递 引用传递 http://blog.youkuaiyun.com/yusiguyuan/article/details/12357381 http://blog.youkuaiyun.com/yusiguyuan/article/details/12357457 而关于值传递,指针传递,引用传递这几个方面还会存在误区, 所有我觉的有必要在这里也说明一下~ 下文会通过例子详细说明哦 值传递: 形参是实参的 阅读详情

相关推荐

Madeira 跨架构运行环境:FEX-Emu + Wine + DXMT 技术栈解析

二进制翻译与 Windows 应用兼容运行是跨架构计算的核心技术,通过动态指令翻译和 API 重实现,使 x86-64 程序能在 ARM 等异构硬件上高效执行。其原理基于块级翻译缓存、寄存器映射和系统调用转换,显著提升性能并降低资源占用。该技术价值在于打破架构壁垒,支持国产化替代、ARM 桌面及服务器场景,让行业软件和开发工具链无缝迁移。典型应用包括办公软件、CAD 工具及轻量游戏,结合 FEX-Emu、Wine 和 DXMT 等组件,实现从指令层到图形层的完整兼容。本文深入拆解 Madeira 项目的四层

weixin_34279184的博客 1359

值传递,地址传递,引用传递

值传递 值传递的实质 将实参的值(a、b)复制到形参(m、n)相应的存储单元中,即形参和实参分别占用不同的存储单元。 值传递的特点 值传递的特点是单向传递,即主调函数被调用时给形参分配存储单元,把实参的值传递给形参,在调用结束后,形参的存储单元被释放,而形参值的任何变化都不会影响到实参的值,实参的存储单元仍保留并维持数值不变。 代码演示: #include<iostream> using namespace std; //值传递 void swap1(int m,int n){ in

gsyalt的博客 8014

C语言之传值、传址详解

C语言传值、传址详解

十三阿哥的博客 2277

C语言指针值传递和地址传递

C语言传参分为值传传递和地址传递。C语言指针传参时,可以通过指针引用方式改变指针指向的值。改变变量,可以使用指针应用方式,改变地址,使用指针的指针引用方式。 C语言值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参) #include <stdio.h> void swap(int x, int y); main() { int a = 10, b = 20; swap(a,

tecoes的博客 1万+

各种逻辑漏洞

注册:短信轰炸验证码安全问题密码爆破邮箱轰炸用户任意注册、批量注册用户名枚举XSS(有框的地方就可以尝试插XSS)登录:短信轰炸、验证码安全问题、密码爆破、邮箱轰炸SQL注入撞库抓包把password字段修改为空值发送认证凭证替换、比如返回的数据包中包含账号,修改账号就能登录到其他账号Cookie仿冒修改返回包的相关数据,可能会登陆到其他的用户找回密码:短信邮箱轰炸、短信邮箱劫持重置任意用户账户密码、验证码手机用户未统一验证直接跳过验证步骤。

shirlly_的博客 2093

MIC(Maximal Information Coefficient)最大互信息系数

MIC(Maximal Information Coefficient)最大互信息系数是一种用于衡量两个变量之间相关性的统计量。它扩展了传统的互信息(MI)和条件互信息(CMI)的概念,具有更广泛的应用范围。MIC能够捕获包括功能性和非功能性的广泛的关联,具有普遍性和公平性。普遍性意味着在足够的样本量下,MIC能够捕捉到广泛的相关关系,而不仅仅局限于特定的功能类型;公平性则意味着MIC对不同类型的包含同等噪声的关系给出了相似的分数。需要注意的是,虽然MIC具有很多优点,但它也有一些局限性。

qlkaicx的博客 4604

C语言参数传递——地址传递与值传递

以经典的交换变量函数 swap(a,b) 为例,说明地址传递与值传递的区别。 值传递:函数的形参变量与实参变量,是两个完全无关的变量,函数在被调用时,创建形参,将实参的值复制过来(替身)。形参本身在函数调用结束后会被销毁(除形参外,static关键字可以使函数内部的变量在调用结束时避免被销毁)。 除非函数内部有 return 语句将更新后的值再传递出去,否则函数内部进行过的逻辑于外部而言无意义。 地址传递:通过将实参地址传递给函数,并在函数内部通过地址调用实参,可以实现对实参的直接控制。 进.

rotk2015的博客 5457

手把手教你用STM32F103C8T6驱动HUB75 LED点阵屏(附74HC595级联代码)

本文详细介绍了如何使用STM32F103C8T6开发板驱动HUB75接口的LED点阵屏,包括硬件连接、74HC595级联代码、时序控制及灰度显示实现。通过实战案例展示动态文字显示和性能优化技巧,帮助开发者快速掌握LED点阵屏驱动技术。

weixin_42623010的博客 341

【C语言程序设计】第25篇:参数传递机制:值传递与地址传递

本文是C语言程序设计专栏的第二十五篇。在上一篇学习了函数调用的底层机制后,现在需要深入理解参数传递的两种方式——值传递和地址传递。C语言中所有参数传递本质上都是值传递,但通过指针可以实现类似其他语言中“引用传递”的效果。理解这一区别,对于编写正确、高效的函数至关重要。本文将系统介绍值传递的本质(传递实参的副本),详细讲解如何利用指针模拟引用传递以实现对实参的修改,并介绍const限定符在函数参数中的保护作用。

2301_80672009的博客 471

字节开源 DeerFlow 2.0:从 Deep Research 到 Super Agent Harness 的进化之路

GitHub Trending 冠军项目,字节跳动完全开源的超级智能体框架。支持子代理、沙箱执行、长期记忆、技能扩展,可完成从几分钟到几小时的复杂任务。本文深度解析架构设计、安装实战、技能系统,并附上独家配置指南。

qq_38610923的博客 1711

别再搞混了!MATLAB通信仿真中EbN0转SNR的保姆级公式推导与避坑指南

本文深入解析MATLAB通信仿真中EbN0与SNR转换的核心公式,揭示数字仿真与理论系统的关键差异。通过真实案例展示错误参数设置导致的隐蔽问题,并提供完整的参数自查清单和正确实现代码,帮助工程师和学生避免常见错误,确保仿真结果准确可靠。

weixin_28746223的博客 348

C语言值传递和地址传递

值传递和地址传递,C语言函数传参方式详解 C语言中文网推出辅导班啦,包括「C语言辅导班、C++辅导班、算法/数据结构辅导班」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践 + 永久学习。QQ在线,随时响应! 在 C 语言中,函数的参数传递方式有两种:值传递与地址传递。下面分别介绍这两种传递形式。 值传递 这种方式使用变量、常量、数组元素作为函数参数,实际是将实参的值复...

Li__dawn的博客 1331

手把手教你YOLOv8/YOLOv11分割训练自己数据集和推理,并教你使用Labelme工具标注数据(附分割网络结构图)

YOLOv8-seg 和 YOLOv11-seg 都是一种高效实例分割算法,实例分割模型的输出是一组勾勒出图像中每个物体的遮罩或轮廓,以及每个物体的类标签和置信度分数。当你不仅需要知道物体在图像中的位置,还需要知道它们的具体形状时,实例分割就非常有用了,功能非常强大,可以应对各种视觉任务。 YOLOv11-seg 则在 YOLOv8-seg 基础上进一步魔改了模型架构,相对分割速度可能更快,其他指标性能有待测试。实例分割可以用于自动驾驶、医疗图像处理、智能农业监控等领域。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 4474

值传递和地址传递讲解

C语言 “值传递”和“地址传递”

Hero-Rambo的专栏 1140

从你的全世界路过---陌陌X-SIGN还原

我们上期介绍了hook 接口方式,今天我分析so 层。学习是为了复杂的事情简单化。不用如此繁琐。跟进native_sdbyecbu37x这个函数,我们f5看伪代码 v13 = sign(v9, v10, v11, a6); 跟进这个函数 代码如下(示例): 2.代码贴入 SHA消息摘要java代码如下: java 代码如下(示例): 总结 算法,结合动态调试!

任雪飘的博客 2299

面向精准医疗的多模态影像融合:实现前列腺MRI与大病理切片的三维配准与空间重建研究

亲爱的同学,当你能完整实现“前列腺MRI与大病理组织学图像的3D配准及体素重建”,你会发现医学影像交叉领域的毕设课题充满挑战与乐趣。我们将从临床需求出发,拆解3D配准与体素重建的核心技术,带你从原理到代码实现完整流程,让你的毕设不仅能顺利完成,更能体现临床应用价值。,让MRI和病理图像在同一空间对齐,能实现“术前影像-术后病理”的精准关联,为前列腺癌的精准诊疗、预后评估提供关键依据——这一课题既有技术挑战性,又有临床意义,是毕设的优质选择。(如NCC、Dice、配准时间),用数据证明方法的优越性。

m0_71589036的博客 4717

Python中函数传参是传值还是引用?对比C语言中的参数传递

一、首先回忆一下C语言中的参数传递,分为值传递和引用传递,用简单的swap函数举例1、值传递传值#include&lt;stdio.h&gt; void swap(int x,int y) { int temp = x; x = y; y = temp; } int main() { int a = 1, b = 3; swap(a,b); printf("%d,%d",a,b)...

weixin_40314737的博客 927

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

c语言调用带输入参数的函数,C语言函数调用与参数传递剖析

摘要:在介绍函数调用有关概念的基础上,通过例证的方法总结了函数调用过程中参数传递的方式及特点,可以更好的帮助学生理解和学习有关函数问题。关键词:函数调用 实际参数 形式参数 参数传递中图分类号:TP312.1 文献标识码:A 文章编号:1007-9416(2012)02-0144-02函数是C语言中的基本组成单位,一个较大的C程序一般可分为若干个程序模块,实现某一特定功能的模块主要由函数来完成。所...

weixin_29534421的博客 1602

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

论参数传递

最近又折回来看C语言了,因为找工作的这段时间,自己也反思了很多,虽然觉得语言并不是什么大问题,可是说到底C语言也是基础啊,所以还是要重新来学习一下,认识能再深刻一下。     之所以一直很逃避C语言是因为害怕指针,指针指来指去,它没晕我先晕了。现在能够正视自己的缺点,是因为确实是想成长。Now,come to the poiint.我今天要说的是关于参数传递的问题。我从C和Java两种语言来说明

lxy15329的专栏 692

C语言函数传递与值传递

C语言提供了两种参数传值机制:一种是值传递,就是将实参的值赋值给形参,换句话说,形参是实参的一份拷贝,因此函数对形参的改变并不影响实参;另一种是参数传递,是一种地址传递,是指将实参的地址赋值给形参,即形参和实参指向同一块内存空间,因此函数对形参对象的处理就是对实参的处理。C语言中实现地址传递的方法一般是将形参指定为指针类型。     为了提高数组的传递效率,C语言中数组作为函数参数传递时实际传递

午夜阳光 1629

C语言函数调用三种方式:传值调用,引用调用和传地址调用

C语言函数调用三种方式:传值调用,引用调用和传地址调用

yuyaweibest的博客 3万+

C语言中函数参数的传值问题

C语言中参数的传值一直比较含糊,今天在网上看到三个面试题的详解,感觉讲的很好,就拿来记下,方便学习和记忆。 1. 考题一:程序代码如下: void Exchg1(int x, int y)  {   int tmp;   tmp=x;   x=y;   y=tmp;   printf(“x=%d,y=%d/n”,x,y) } void main() {   int a=4,

ytuglt的博客 719

一文剖析C语言函数

函数是C语言重要的一个组成部分,可以这么说,只要是使用C语言来写一个项目,那么就必须会使用到函数这个功能,也正因为函数的存在,使得我们在编写代码时能够模块化,一个函数对应一个功能,避免重复造轮子。本文将通过先理论后实战的方式来为大家进行C语言函数的讲解。 C语言中的函数其实就是为了完成一个特定功能的代码模块,也就是说一个函数就是一个小功能。当我们在某种场景下需要实现这个小功能那么也就只需要调用这个函数即可,倘若没有函数这个功能的话,我们可能就要每次实现一个功能的话就要实现其完整过程,但是每次的操

liung_的博客 1225

C语言地址传递和值传递简析

转自: 不少同学在学到C语言的指针部分时感到很困惑,对经常提到的“值传递”和“地址传递”两个概念弄不明白。实际上,因为地址本身也可以作为一个特殊的“值”,所以地址传递也是一种特殊的值传递。只是为了强调其特殊性,故称之为“地址传递”。我们在学习过程中可以视参数的形式而区别对待,比如若参数传递的是简单数据类型的数值,则将其归类为值传递方式;若参数传递的是变量的地址,则视其为地址传递方式。

qq1987924的专栏 706

C语言函数设计秘籍:参数传递、返回值与作用域全解析

在C语言编程中,函数是构建程序的基本模块,它可以将复杂的任务分解为多个小的、可管理的子任务,提高代码的复用性和可维护性。而函数设计中的参数传递、返回值和作用域是三个至关重要的方面,深刻理解它们的原理和使用方法,能够让我们编写出更加高效、健壮的代码。本文将全面解析这三个方面,为你揭开C语言函数设计的神秘面纱。

星辰夜语的博客 1182
下一篇: 数据结构之线性表
There Is No Code
博客等级 码龄10年 254粉丝 51原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

There Is No Code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值