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

2023-10-16 07:08

本文主要是介绍C语言参数传递——地址传递与值传递,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

以经典的交换变量函数 swap(a,b) 为例,说明地址传递与值传递的区别。

 

  1. 值传递:函数的形参变量与实参变量,是两个完全无关的变量,函数在被调用时,创建形参,将实参的值复制过来(替身)。形参本身在函数调用结束后会被销毁(除形参外,static关键字可以使函数内部的变量在调用结束时避免被销毁)。
  2. 除非函数内部有 return 语句将更新后的值再传递出去,否则函数内部进行过的逻辑于外部而言无意义
  3. 地址传递:通过将实参地址传递给函数并在函数内部通过地址调用实参,可以实现对实参的直接控制
  4. 进行地址传递一定要有 *解引用

 

例一:值传递

#include <stdio.h>void swap(int x, int y);main()
{int a = 10, b = 20;swap(a, b);printf("a=%d\nb=%d\n", a, b);return 0;
}
void swap(int x, int y)
{int t;t = x;x = y;y = t;
}

 

例二:地址传递

#include <stdio.h>void swap(int *x, int *y);main()
{int a = 10, b = 20;swap(&a, &b);printf("a=%d\nb=%d\n", a, b);return 0;
}
void swap(int *x, int *y)
{int t;t = *x;*x = *y;*y = t;
}

 

例三:值传递

#include <stdio.h>void swap(int *x, int *y);main()
{int a = 10, b = 20;int *pp = &a;int *kk = &b;swap(pp, kk);printf("a=%d\nb=%d\n", *pp, *kk);return 0;
}
void swap(int *x, int *y)
{int *t;t = x;x = y;y = t;
}

 

参考

C语言参数传递

这篇关于C语言参数传递——地址传递与值传递的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/219864

相关文章

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

使用Java实现获取客户端IP地址

《使用Java实现获取客户端IP地址》这篇文章主要为大家详细介绍了如何使用Java实现获取客户端IP地址,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 首先是获取 IP,直接上代码import org.springframework.web.context.request.Requ

异步线程traceId如何实现传递

《异步线程traceId如何实现传递》文章介绍了如何在异步请求中传递traceId,通过重写ThreadPoolTaskExecutor的方法和实现TaskDecorator接口来增强线程池,确保异步... 目录前言重写ThreadPoolTaskExecutor中方法线程池增强总结前言在日常问题排查中,

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允