主函数的实参是由操作系统传递的。
网站的建设创新互联公司专注网站定制,经验丰富,不做模板,主营网站定制开发.小程序定制开发,H5页面制作!给你焕然一新的设计体验!已为LED显示屏等企业提供专业服务。
c++规定的主函数标准格式(c语言未具体规定):int
main(int
argc,
char
*argv[])
其中int
argc
表示操作系统传递给程序的参数个数,char
*argv[]
存储各个参数。
例如:
若有程序如下:
int
main(int
argc,
char
*argv[])
{
int
i;
printf("您输入了
%d
个参数\n分别是:",argc);
for(i=0;i
运行-
cmd
-
输入
c:\app.exe
hello
world!
回车
执行结果将是:
您输入了
3
个参数
分别是:c:\app.exe
hello
world!
"
注意,第一个参数值将是你程序的文件名。
给个程序自己参考,下面程序运行时你输入一个文件名, 它会打开此文件,并写入0-99个数字。
#include stdio.h
void foo(const char *filename)
{
int i;
FILE *fp = fopen(filename, "w+");
for (i = 0; i 100; i++)
fprintf(fp,"%d ", i);
fclose(fp);
}
void main()
{
char str[128];
scanf("%s", str);
foo(str);
}
形参全称形式参数,位置是写在函数定义时函数名后面的括号中,比如
int max(int x, int y)
{函数内容}
这个函数,形参就是函数名max后面括号里定义的x和y
而实参全称实际参数,是你在这个函数之外调用该函数的时候,函数名后的括号中的内容
比如
main()
{
int a=3,b=4;
int c=max(a,b);
}
在int c=max(a,b)这一行可以看到,实参就是max括号后的a和b
函数调用可以作为一个函数的实参,但是不能作为一个函数的形参,因为返回值是储存在寄存器中的,而在C语言中寄存器是8位的,8位寄存器只能储存数据而不能储存地址,没有地址自然不能作为形参了
当你定义函数时,那时候的函数参数就叫做“形参”,因为它们没有任何实际内容。实际使用函数时,那时候参数就叫做“实际”了。
int
add(int
a,int
b
){......}
此时,a与b就叫做形参。
int
c=add(5,3)中,5与3就是实参。
第一个函数中有两个参数,可能不易理解。换个形式看一下。
func(a+b,c+d+e)中,你应该知道是两个参数。
(exp1,exp2)类似于a+b,也是个表达式,只不过它的运算符是逗号运算符。逗号运算符的结果是最后一个表达式。(exp1,exp2)运算结果就是exp2.
(exp3,exp4,exp5)等于exp5。
函数2是个递归调用函数,理解起来稍有些复杂。函数2中,前两个参数容易懂。因为fun是个函数,它能得到一个数,这个数算出来后,再作为一个参数。
第三个参数fun(n+k,d,(a,b))中,(a,b)仍然是逗号表达式,作为第三个参数。
如果你不懂递归调用,我可能就白啰嗦了。
形参与实参在本质上是两个不同的东西。
比如函数f(x)=y=x²+2x,x就是函数的参数,我们用c语言把它写出来就是:
float
f(float
x)
{
float
y;
y=x*x+2*x;
return
y;
}
你看看与f(x)=y=x²+2x何其相似!
当我们要计算f(2)的函数值时,就让x=2,得到y=8,即f(2)=8。
在c语言这里,我们就把x叫“形参”,把2叫“实参”,可以看出它们是多么不同了吧!
如果有一个变量a=1,也可以计算f(a)=2,其实在计算时,把a的值赋给了x。a是实参,x仍然是形参。计算前后a的值并没有变化。
如程序中调用:c=f(a)+f(2),结果得到c=10。
值得注意的是,往往实参与形参使用同一个字母,比如都用x,但是这两个x是不同的变量,实参x把值赋给形参x后,就没有实参的什么事了,在函数中形参x值的变化也不会影响实参x的值。
说起它们的相同之处,就是它们的变量类型是一样的;说起它们的联系,就是有一次实参对形参的赋值;说起它们的区别,则是两个不同的变量。
啰嗦很多,不知是否说清,若有不明之处,请留言。