函数的值传递

三个同学,四门科目,分别给出他们四门科目的成绩,用函数求出他们每一个同学的总成绩,即函数的返回值必须是三个。

这道题目用函数来实现的话,一定要注意在函数体里面申请的空间在函数执行完之后就会被释放,注意局部变量的生命周期。

01

#include<stdio.h>
void  aver(int a[3][4],int b[3])
{
	int i,j;
	for(i=0;i<3;i++)
	{
		for(j=0;j<4;j++)
		{
			b[i]+=a[i][j];

		}
	}

}
void main()
{
	int a[3][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};
	int b[3]={0,0,0};
	int *q,i;
	q=b;
	aver(a,b);
	for(i=0;i<3;i++)
	{
		printf("%d\n",*(b+i));
	}

}

  02

定义在函数中的一维数组会退化成一个指针,二维数组会退化成一个一个指向一维数组的指针,所以将程序做下面这样微小的改动也是可以的。

#include<stdio.h>
void  aver(int (*a)[4],int *b) //数组的退化
{
	int i,j;
	for(i=0;i<3;i++)
	{
		for(j=0;j<4;j++)
		{
			b[i]+=a[i][j];

		}
	}

}
void main()
{
	int a[3][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};
	int b[3]={0,0,0};
	int *q,i;
	q=b;
	aver(a,b);
	for(i=0;i<3;i++)
	{
		printf("%d\n",*(b+i));
	}

}

  则可以得到

数组做为形参时,退化为指针

三维数组,退化为指向二维数组的指针

二维数组,退化为指向一维数组的指针

一维数组,退化为指向类型(如int)的指针

时间: 2024-10-10 17:06:40

函数的值传递的相关文章

函数深入理解---函数的值传递

函数的值传递 //由于函数是对象,所以可以直接把函数参数传递进来 function callFun(fun,arg){ //第一个参数就是函数对象 return fun(arg); } function sum(num){ return num +100; } function say(str){ console.log('hi' + str); } //var say = x; //调用了say函数 callFun(say,'leo'); //调用了sum函数 console.log(call

java中函数是值传递还是引用传递?

相信有些同学跟我一样,曾经对这个问题很疑惑.在网上也看了一些别人说的观点,评论不一.有说有值传递和引用传递两种,也有说只有值传递的,这里只说下个人见解 先看一个例子 public class Test1 { public static void main(String[] args) { int a = 10; changeNum(a); System.out.println("main a=" + a); } static void changeNum(int a) { a = 10

[转]Python中函数的值传递和引用传递

首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传递. 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本.值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值. 引用传递(pass-

python 的函数、值传递、和作用域(例子)

1.python的函数格式: def FuncName([arg1,arg2,..]): func_suite def: def是函数的关键字 FuncName: 实际也是变量,它指向函数对象,在函数定义时被赋值,根据习惯,这里我们成为函数名 ():()是函数运算符,引用函数时,用函数名+()引用,如: FuncName() [arg1,arg2,..]: 这个是函数体的参数,当为空时,我们称这个函数为无参函数,相对应的就是有参函数,python的参数传递很强大,可以是位置参数一一对应,也可以默

C++函数返回值传递

C++函数返回可以按值返回和按常量引用返回,偶尔也可以按引址返回.多数情况下不要使用引址返回. 使用按值返回总是很安全的,但是如果返回对象为类类型的,则更好的方法是按常量引用返回以节省复制开销.必须确保返回语句中的表达式在函数返回时依然有效. const string& findMax(const vector<string>& arr) { int maxIndex = 0; for (int i=1;i<arr.size();i++) { if (arr[maxInd

C语言中函数参数传递的本质是值传递

数组名做函数参数进行传递时,实际上是是一份该指针的拷贝. 给形参赋予其他值,并不影响实参的值. 类似于: int *p = a;    //a为数组名 p = b;          //b为数组名 当然,如果你传递了一个指向某个变量的指针,而函数对该指针执行了间接访问操作,那么函数就可以改变那个变量,但参数还是传值方式传递的,这是两个概念,不矛盾. 对于字符串复制函数strcpy: void strcpy(char *buffer, char const *string) { while((*

c++中函数参数传递(值传递、指针传递,引用传递)进一步认识

概念 首先从概念上来说一下这几种函数传参方式及区别: 1.值传递:形参是实参的拷贝,改变函数形参的值并不会影响外部实参的值,这是最常用的一种传参方法,也是最简单的一种传参方法,只需要传递参数,返回值那是return考虑的: 2.指针传递:指针传递参数从本质上来说也是值传递,它传递的是一个地址.[值传递过程中,被调函数的形参作为被调函数的局部变量来处理,即在函数内的栈中开辟内存空间以存放由主调函数放进来的实参的值,从而成了实参的一个副本(记住这个,函数内参数的是实参的副本)].由于指针传递的是外部

js中函数传递参数,究竟是值传递还是引用传递?

记住真理: js函数传递参数,不管是简单数据类型,还是引用数据类型,都是值传递!! 下面是js红包书里面的例子: function setName(obj) { obj.name = "Nicholas"; obj = new Object(); obj.name = "Greg"; } var person = new Object(); setName(person); alert(person.name); // "Nicholas" 肯定

Java中,函数参数的传递,是值传递还是引用传递

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?  答:是值传递. 可以这么理解:有一个Person(name="S"),作为参数传给一个方法,在此方法中将此Person重新设置name=“B”,那么有一下结论 ①这个Person还是这个Person,一直都是他,但是他的名字被改了,不管是原来的引用还是方法里的引用,引用的都是一个对象,所以,所有引用的值都变了 ②如果在方法中重新new了一个Person赋给参数,