关于C语言函数的传值和传址传递

32 篇文章 1 订阅
23 篇文章 1 订阅

1.函数中调用函数还有声明函数的差别是前面是否加上函数类型(函数类型也就是返回值类型)

2.函数根据能否被其它源文件调用可以分成两个类型

  1. 可以被外部源文件调用的函数被称为外部函数(extern),格式为:
    extern double funll(int x,int y)

  2. 不能被外部源文件调用的函数被成为内部函数(static),格式为:
    static double funll(int x,int y)

如果调用函数与被调用函数不在同一个源文件中,应该用这两个格式进行声明

3.当形参(形式参数)为变量的时候,使用传值方式实现形式参数与实际参数的数据传递。

传值方式只能单向传递数据,从实际参数传向形式参数,但形式参数没办法传个实际参数。所以即使当实际参数传递数据给形式参数后,形式参数改变了,实际参数也不会有改变,但我们想要的恰恰就是将形式参数的数据传给实际参数

例:

#include<stdio.h>
void jun(int a,int b)
{
	int c;
	scanf("c=%d",&c);
	a=a+c;
	b=b+c;
	getchar();
}

void main(void)
{
	int x=2,y=3;
	jun(x,y);
	printf("%d %d",x,y);
	getchar();
	getchar();
}

上面这个程序想要jun函数实现两个实数的数据交换,但两个形参均为普通变量,以传值方式传递数据,形参的变动不会影响实参的数据。所以不管输入的值为多少,x、y的输出值都不会改变

注:要解决这个问题可以定义一个全局变量或者使用return函数来实现两个函数之间的数据交换

当形式参数为数组或指针的时候,使用传址方式实现数据传递

传址方式为双向传递,两者实现共享数据,当一方改变,另一方也会发生改变。
当传递数组时,调用函数中的参数只需写下数组名(即该数组的首地址)当作指针变量来除理,且为一维数组,也不用写下第一维的大小

例:

#define N 5 
main()
{
int sum(int a[ ],int n);	//形参作指针变量,第一维的大小无需指定
int s,n=10;
int score[n];
s=sum(score,N);	//调用函数,只需写数组名
}
int sum(int a[ ],int n)	//同上,第一维的大小无需指定,且定义函数不用分号

注:在该程序中,程序的本质为使用score数组进行计算,而不是作为形参变量的数组a

4.函数定义的变量中,优先级表现为:

语句块局部变量>函数级局部变量>全局变量

注:为了便于识别,全局变量的第一个字母最好使用大写

传址方式和传值方式的区别和本质

传值方式其实只是函数在处理数组的时候,必须分配足够的内存来存储数组的副本,函数所处理的数组也只是副本,不是原始数据;而传址方式却是把数组的地址传给函数,让函数直接处理数组

易错点
1.当应该函数调用另一个函数作为实际参数的时候,不能在被调用的函数前加上函数类型,因为你是要调用这个函数,而不是声明函数

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值