关于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语言深度总结[全面认识main函数传递参数]argc和argv是main函数的形式参数 。这两个形式参数的类型是系统规定的 。如果main函数要带参数,就是这两个类型的参数;否则main函数就没有参数 。
坚持使用标准的意义在于:当你把程序从一个编译器移到另一个编译器时 , 照样能正常运行 。
由于是 int main( ..) 那么当时 应当返回 int 但是return 2.3 ;也能运行正确,这是因为编译器自动转换2.3为int,截断后为return 2;
如果写为 return "abc";那么会报错,error C2440: “return”: 无法从“const char [4]”转换为“int” 。
变量名称argc和argv是常规的名称,当然也可以换成其他名称 。那么,实际参数是如何传递给main函数的argc和argv的呢?我们知道 , C程序在编译和链接后,都生成一个可执行文件 。也可以在命令行下带参数执行,命令行执行的形式为:可执行文件名称 参数1 参数2 ... ... 参数n 。可执行文件名称和参数、参数之间均使用空格隔开 。
如果按照这种方法执行,命令行字符串将作为实际参数传递给main函数 。具体为:
(1) 可执行文件名称和所有参数的个数之和传递给argc;
(2) 可执行文件名称(包括路径名称)作为一个字符串,首地址被赋给argv[0] , 参数1也作为一个字符串 , 首地址被赋给argv[1] , ... ...依次类推 。
字符串arav[i](i=1,...argc-1)表式第 i 个程序参数,标准C 要求argv[argc]是个null指针,但在有些旧时编译器中却不是这样的,argv向量以及它所指向的字符串必须是可以修改的,并且他们的值在程序执行期间不能被编译器或操作系统所修改 。如果编译器并不允许大小写混合的字符串 ,则存储在argv中的字符串必须采用小写形式 。
1.给main函数传递参数只有一种方式,即main(int argc, char *argv[]) 。第一个参数必须int,第二个(如果有的话)必须是char**或char *argv[] 。
2.argc代表传入参数的个数 , argv是一个数组 , 每个元素都是一个char * 。字符串arav[i](i=1,...argc-1)表式第 i 个程序参数 , 标准C 要求argv[argc]是个null指针 。
3.main函数参数理论上支持“无数”个 , 且参数在进程内支持修改 。
c语言向函数传递函数作为参数#include stdio.h
//---子函数声明---//
int func1();
int func2(int (*func1)());//形参为函数指针(即指向函数的指针)
//---主函数---//
int main(){
printf("向函数二传递函数一,\n即函数一作为函数二的参数 。\n");
printf("%d ",func1());
printf("%d\n",func2(func1));//注意函数名即为函数地址?。。。。。?
}//实参为函数名func1或者func1 , 两者等价 , 而非func1()
//---子函数定义---//
int func1(){
return 1;
}
int func2(int (*func1)()){//形参为函数指针(即指向函数的指针)
return func1() 1;
}
【c语言中函数传递参数正确 c语言函数的参数传递】关于c语言中函数传递参数正确和c语言函数的参数传递的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 显卡GTX880M怎么样,gtx880m相当于什么显卡
- 平板电脑怎么插u盘,微软平板电脑怎么插u盘
- H61支持什么四核CPU,h61能用的cpu
- 快手直播教程人脸验证分享,快手直播怎么弄人脸识别
- python函数平均分 python 平均分
- erp管理系统例题,erp系统应用案例分析
- 快联app安卓下载,快连官网下载安卓
- 哪些行业需要gis遥感,gis是遥感吗
- java代码求n的阶乘 java n阶乘