1.8 C语言之参数传递

1.8 C语言之参数传递

一、参数传递

  • 在C语言中,所有的参数传递都是值传递,也就是说,传递给被调用函数的参数值存放在临时变量中,而不是存放在原来的变量中。这与其他语言的引用传递有所不同。
  • 在C语言中,被调用函数不能直接修改主调函数中变量的值,而只能修改其私有的临时副本的值。
c 复制代码
#include <stdio.h>
int f(int n);

int main()
{
	int n = 3;
	int fn = f(n);
	printf("main函数---变量n:%d\n", n);
	printf("main函数---f函数返回的n:%d\n", fn);
	return 0;
}

int f(int n) {
	--n;
	printf("f函数---变量n:%d\n", n);
	return n;
}
运行结果:
f函数---变量n:2
main函数---变量n:3
main函数---f函数返回的n:2
  • 必要时,也可以让函数能够修改主调函数中的变量。在这种情况下,调用者需要向被调用者函数提供待修改值的变量的地址,即指针,而被调用函数则需要将对应的参数声明为指针类型,通过指针间接访问变量,这就类似于java的引用,关于指针,后续章节再提。
  • 如果是数组参数,情况就有所不同了。当把数组名用作参数时,传递给函数的是数组起始元素的地址(它并不复制数组元素本身)。在被调用函数中,可以通过数组下标访问或修改数组元素的值。
c 复制代码
#include <stdio.h>
int f(int arr[]);
int printArr(int arr[], int arrLen);

int main()
{
	int arr[3];
	arr[0] = 0;
	arr[1] = 1;
	arr[2] = 0;
	printf("调用f前-数组元素\n");
	printArr(arr, 3);
	int fn = f(arr);
	printf("main函数---f函数返回的值:%d\n", fn);

	printf("调用f后-数组元素\n");
	printArr(arr, 3);
	return 0;
}

int f(int arr[]) {
	arr[0] = 2;
	arr[1] = 3;
	arr[2] = 4;
	return;
}

int printArr(int arr[], int arrLen)
{
	for(int i=0; i< arrLen; ++i)
		printf("index:%d--- item: %d\n", i, arr[i]);
	return;
}

运行结果:
调用f前-数组元素
index:0--- item: 0
index:1--- item: 1
index:2--- item: 0
main函数---f函数返回的值:8
调用f后-数组元素
index:0--- item: 2
index:1--- item: 3
index:2--- item: 4
相关推荐
AI莫大猫33 分钟前
(6)YOLOv4算法基本原理以及和YOLOv3 的差异
算法·yolo
taoyong00136 分钟前
代码随想录算法训练营第十一天-239.滑动窗口最大值
c++·算法
Uu_05kkq1 小时前
【C语言1】C语言常见概念(总结复习篇)——库函数、ASCII码、转义字符
c语言·数据结构·算法
清梦20202 小时前
经典问题---跳跃游戏II(贪心算法)
算法·游戏·贪心算法
Dream_Snowar2 小时前
速通Python 第四节——函数
开发语言·python·算法
1nullptr3 小时前
三次翻转实现数组元素的旋转
数据结构
Altair澳汰尔3 小时前
数据分析和AI丨知识图谱,AI革命中数据集成和模型构建的关键推动者
人工智能·算法·机器学习·数据分析·知识图谱
TT哇3 小时前
【数据结构练习题】链表与LinkedList
java·数据结构·链表
嵌入式科普3 小时前
十一、从0开始卷出一个新项目之瑞萨RA6M5串口DTC接收不定长
c语言·stm32·cubeide·e2studio·ra6m5·dma接收不定长
A懿轩A3 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列