扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
1.
创新互联主营新野网站建设的网络公司,主营网站建设方案,手机APP定制开发,新野h5小程序开发搭建,新野网站营销推广欢迎新野等地区企业咨询
fun((a,b),(c,d,e));语句中含有2个实参
注意:
(a,b)和(c,d,e)都是逗号表达式,
逗号表达式的值取最右值,
所以:
fun((a,b),(c,d,e))可以等价的看成是:fun((b),(e));含有2个实参
2.
fun(a[3],n);语句中有2个实参,也就是a[3]的值,n值
实参必须要指明数据类型,而且实参和形参的数据类型必须一致。
主要原因,因为数据类型反应了数据的意义,譬如,0x3f8ccccd这个十六进制数,用int类型来描述它,它就是一个整数,用float类型来描述它则为1.1。示例代码如下。
#include stdio.h
int main()
{
int i = 0x3f8ccccd;
float f = *(float *)i;
printf("%d\t%f\n", i, f);
return 0;
}
事实上C语言中的数据类型,类似于平时说话的”语境“, 它表达了语言的意义,譬如:”谢谢你“和”谢谢你全家“, 谢谢是一个符号,但是不同的语境下有不同的意义。正是因为此,C语言不管是函数参数传递还是使用标识符进行运算,都必须指明其数据类型。
不对,在C语言中,传值有地址传值和参数传值,参数传值只能将实参传值给形参,所以A选项正确。C语言中的外部变量是可以在函数之间传递数据的。
C语言中的自动变量是默认的变量,实际上是函数中的局部变量,所以D选项正确。全局变量一经定义都是需要分配内存单元,在程序运行过程中自始至终都会占用固定的空间,在未知内存情况下,最好不要使用全局变量。
函数调用时,值可以双向传递,并没有限制使用全局变量还是局部变量,需要根据程序的逻辑需要进行选择。
扩展资料
C语言参数传递:
1、值传递
参数传递只把变量a的值传递给了变量p,此时变量a与变量p是值相同的两个不同变量,在内存不同的两个地址中,所以对变量p赋值只是修改了变量p的值,并不能修改变量a的值。总结一句话就是:值传递不传递变量本身,只传递变量的值。
2、引用传递
与值传递不同,func的参数是int p,表示引用传递。如输出所示,通过引用传递,变量a的地址与变量p是相同的,也就是说引用传递把a的地址传给了变量p,所以对变量p进行赋值之后,变量a的值也改变了,因为变量a与变量p实际是同一个变量。
3、指针传递
指针传递,顾名思义,int *p表明p是一个指针变量,调用func(a)是把变量a的内存地址传递过去赋值给指针变量p,此时指针变量p的值是变量a的内存地址,故可看到输出p为efbfde2c(变量a的内存地址)。
*p是对指针p的值(即变量a的内存地址)进行取值,相当于*a,所以对*p进行赋值也就改变了变量a的值。
C语言整型、实型数据,如果以变量名称作为参数,系统规定的处理方式就是:实际参数仅决定形式参数的初值,形式参数在子函数内部的操作与实际参数无关。
如果需要子函数内的操作能够影响实际参数的内容,需要使用实际参数变量的地址做参数,使得子函数内部对于形式参数的操作能够直接在实际参数的存储空间内进行。你的子函数定义应该修改为:
int
max(int
*a,int
*b)
{
int
c;
if(*a*b)
{
c=*a;
*a=*b;
*b=c;
}
}
函数的调用格式应该为:
max(m,i);
使用实参地址作为参数,与子函数指针类型的形式参数对应。
达到在子函数中通过实际参数地址,直接操作实际参数变量内容的目的。
形参是一个变量,是在引用的函数中的变量
实参也是一个变量.是在主函数中的变量.
两个变量的使用范围不同.
形参只在子函数中使用,实参可以在主函数中使用.
上面,实参写成100,是说,在形参用100代进去.
而形参只能是一个变量,用来吸收实参传递进来的值,以输出结果.
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流