C++main两个形参
c语言形参和实参的传递规则

c语言形参和实参的传递规则C语言是一门非常重要的编程语言,其在计算机科学领域中有着广泛的应用。
在C语言中,函数是一个非常重要的概念,而函数的形参和实参的传递规则更是我们必须要了解的。
本文将详细介绍C语言中形参和实参的传递规则,以便读者更好地理解和掌握这一知识点。
一、什么是形参和实参在介绍C语言中形参和实参的传递规则之前,我们需要先了解什么是形参和实参。
1. 形参形式参数又称为形参,是函数定义时声明的参数。
它们只存在于函数内部,并且只在函数被调用时才会被赋值。
例如:```int add(int a, int b){return a + b;}```上述代码中,a和b就是add函数的两个形式参数。
2. 实参实际参数又称为实参,是在调用函数时传递给函数的参数。
它们可以是任意类型的表达式,并且可以通过变量或常量来表示。
例如:```int main(){int c = add(1, 2);return 0;}```上述代码中,1和2就是add函数的两个实际参数。
二、C语言中形参和实参的传递规则在C语言中,形参和实参的传递规则是非常重要的。
下面将详细介绍C语言中形参和实参的传递规则。
1. 形参和实参的类型必须匹配在调用函数时,实参的类型必须与形参的类型匹配。
如果不匹配,则会发生类型转换。
例如:```int add(int a, int b){return a + b;}int main(){float x = 1.5;float y = 2.5;int z = add(x, y);return 0;}```上述代码中,add函数需要两个整型参数,但是我们传递了两个浮点型参数。
由于浮点型不能直接赋值给整型,因此编译器会进行隐式类型转换。
在本例中,x和y会被转换为整型1和2,然后再进行相加操作。
2. 形参和实参的数量必须一致在调用函数时,实参的数量必须与形参的数量一致。
如果不一致,则会导致编译错误。
例如:```int add(int a, int b){return a + b;}int main(){int c = add(1, 2, 3);return 0;}```上述代码中,add函数需要两个整型参数,但是我们传递了三个整型参数。
c语言返回值类型,形参列表

c语言返回值类型,形参列表在C语言中,函数是一种非常重要的功能模块。
它能够将某些重复的代码封装起来,形成一个模块化的结构,使得代码更简洁、易于阅读和维护。
在本文中,我们将会详细阐述C语言函数返回值类型和形参列表的相关细节。
1. C语言函数返回值类型概述在C语言中,函数返回值类型是指该函数在执行完毕后要返回的值的数据类型。
这个返回值可以是任何数据类型,包括基本数据类型、结构体和指针等。
C语言函数的返回值类型是在函数定义的时候进行指定的。
一般情况下,我们通过在函数定义时在函数名前加上一个数据类型来指定返回值类型。
例如:```int add(int a, int b);```在上面的函数定义中,我们指定了函数返回值类型为int。
这意味着在函数执行完毕后,我们需要返回一个整形数据。
而通过使用return关键字,我们可以将想要返回的值传递回去。
例如:```int add(int a, int b){int sum = a + b;return sum;}```在上面的代码中,我们用sum存储了a和b的和,并通过return 语句将其传递回去。
2. C语言函数形参列表概述C语言中的函数可以包含任意数量的参数,这些参数可以是基本数据类型、结构体和指针等。
这些参数被称为函数的形参,用于接收函数调用时传递过来的数据。
在C语言中,函数形参是在函数定义中进行指定的。
一般情况下,我们通过在函数名后面加上一堆用逗号分隔的参数来指定函数的形参。
例如:```int add(int a, int b);```在上面的函数定义中,我们指定了函数形参a和b的数据类型为int。
这意味着在函数调用时,我们需要传递两个整形参数。
在具体的函数实现中,我们可以像访问普通变量一样访问形参,并且可以将它们当做普通变量来使用。
例如:```int add(int a, int b){int sum = a + b;return sum;}```在上面的代码中,我们在函数内部定义了一个sum变量,并使用a和b进行相加。
2022年辽宁省交通高等专科学校公共课《C语言》科目期末试卷A(有答案)

2022年辽宁省交通高等专科学校公共课《C语言》科目期末试卷A(有答案)一、填空题1、在C语言中,输入操作是由库函数________完成的,输出操作是由库函数________完成的。
2、下面程序段中循环体的执行次数是_______。
a=10;b=0;do{b+=2;a-=2+b;}while(a>=0);3、下面程序段的运行结果是_______。
x=2;do{printf("*");x--;)while(!x==0);4、已有定义int a;float b,x;char cl,c2;为使a=3、b=6.5、x=12.6、cl='a'、c2='A',正确的scanf函数调用语句是_______,数据输入的形式应为_______。
5、若有以下定义和语句,为使变量c1得到字符’A',变量c2得到字符’B’,正确的输入形式是_______。
char cl,c2;scanf("%4c%4c",&cl,8&c2);6、假设m是一个3位数,从左到右依次用a、b、c表示各位的数字,则从左到右各位数字是b、a、c的3位数的表达式是_______。
7、若有定义:inta[3][4]={{1,2},{0},{4,6,8,10}};,则初始化后,a[1][2]得到的初值是_______,a[2][1]得到的初值是_______。
8、请填空:建立如图所示存储结构所需的说明语句是_______。
建立如图所示为变量a输入数据的输入语句是_______。
建立如图所示存储结构所需的赋值语句是_______。
9、下面程序段的运行结果是_______。
char*s1="AbcdEf", *s2="aB";int t;s1++;t=(strcmp(s1,s2)>0);printf("%d\n",t);10、设x=10100011,若要通过x*y使x的高4位取反,低4位不变,则y的二进制数是_______。
C语言练习题

void main()
{ int s,k;
for(s=0,k=0;k<3;k++)
s+=a[k][k];
printf("%d#",s);
for(s=0,k=0;k<3;k++)
7. 设 char x =′a′;则printf(″x = ﹪c, y = ﹪c \ n″,x,97);的输出是( )
A. x = a,y = 97 B. x = 97,y = a
C. x = 97,y = 97 D. x = a,y = a
8、在Trubo-C中,C语言源程序文件的后缀是()。
A. if(a>b){if(c>d) x = 1;else x = 2;}
B. if(a>b){if(c>d) x = 1;} else x = 2;
C. if((a>b) && (c>d)) x = 1;else x = 2;
D. if(a< =b) x = 2;else if (c>d) x = 1;
15.若变量a,b,c已正确定义并赋值,符合C语言语法的表达式是( )。
A. ab/c; B. a/cb C. a?b D. a*b/c
16.为表示.“a和b都大于0”,应使用的C语言表达式是( )。
A.(a>0)&&(b>0) B.a&&b C.(a>0)||(b>0) D.(a>0)|(b>0)
{ *y=x++; }
main函数的参数

一、main函数的参数我们经常用的main函数都是不带参数的。
因此main 后的括号都是空括号。
实际上,main函数可以带参数,这个参数可以认为是main函数的形式参数。
C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。
因此,main函数的函数头可写为:main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。
加上形参说明后,main函数的函数头应写为:main (argc,argv)int argv;char *argv[];或写成:main (int argc,char *argv[])由于main函数不能被其它函数调用,因此不可能在程序内部取得实际值。
那么,在何处把实参值赋予main函数的形参呢? 实际上,main函数的参数值是从操作系统命令行上获得的。
当我们要运行一个可执行文件时,在DOS提示符下键入文件名,再输入实际参数即可把这些实参传送到main的形参中去。
DOS提示符下命令行的一般形式为:C:\>可执行文件名参数参数……; 但是应该特别注意的是,main 的两个形参和命令行中的参数在位置上不是一一对应的。
因为,main的形参只有二个,而命令行中的参数个数原则上未加限制。
argc参数表示了命令行中参数的个数(注意:文件名本身也算一个参数),argc的值是在输入命令行时由系统按实际参数的个数自动赋予的。
例如有命令行为:C:\>E6 24 BASIC dbase FORTRAN由于文件名E6 24本身也算一个参数,所以共有4个参数,因此argc取得的值为4。
argv参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。
指针数组的长度即为参数个数。
数组元素初值由系统自动赋予。
其表示如图6.8所示:main(int argc,char *argv){while(argc-->1)printf("%s\n",*++argv);}本例是显示命令行中输入的参数如果上例的可执行文件名为e24.exe,存放在A 驱动器的盘内。
c语言 形参实参举例

c语言形参实参举例形参和实参是C语言中的两个重要概念,形参是函数定义时声明的参数,实参是函数调用时传入的参数。
下面给出了10个例子,来说明形参和实参的使用。
1. 例子一:求两个整数的和```c#include <stdio.h>int add(int a, int b) {return a + b;}int main() {int x = 3;int y = 4;int result = add(x, y);printf("The sum of %d and %d is %d\n", x, y, result);return 0;}```在这个例子中,函数`add`有两个形参`a`和`b`,分别表示两个整数。
在`main`函数中,定义了两个整数变量`x`和`y`,分别为3和4,然后将这两个变量作为实参传入函数`add`中进行求和,最后将结果打印出来。
2. 例子二:计算圆的面积```c#include <stdio.h>double calculateArea(double radius) {return 3.14 * radius * radius;}int main() {double r = 2.5;double area = calculateArea(r);printf("The area of circle with radius %.2f is %.2f\n", r, area);return 0;}```在这个例子中,函数`calculateArea`有一个形参`radius`,表示圆的半径。
在`main`函数中,定义了一个双精度浮点数变量`r`,表示圆的半径为 2.5,然后将这个变量作为实参传入函数`calculateArea`中进行计算,最后将结果打印出来。
3. 例子三:交换两个整数的值#include <stdio.h>void swap(int* a, int* b) {int temp = *a;*a = *b;*b = temp;}int main() {int x = 3;int y = 4;printf("Before swapping: x = %d, y = %d\n", x, y);swap(&x, &y);printf("After swapping: x = %d, y = %d\n", x, y);return 0;}```在这个例子中,函数`swap`有两个形参`a`和`b`,分别表示两个整数的地址。
2023年安阳师范学院公共课《C语言》科目期末试卷B(有答案)
2023年安阳师范学院公共课《C语言》科目期末试卷B(有答案)一、填空题1、设有如下结构体说明:struct ST{int a;float b;struct ST*c;doublex[3];}st1;请填空,完成以下对数组s的定义,使其每个元素均为上述结构体类型。
_______2、若x=0123,则表达式(5+(int)(x))&(~2)的值是_______。
3、请读程序段:int x=1;printf("%d\n",~x);上面程序段的输出结果是_______。
4、若有定义语句:ints=6;则表达式s%2+(s+1)%2的值为_______5、若a、b和c均是int型变量,则执行表达式a=(b=4)+(c=2)后a的值为_______,b的值为_______,c的值为_______。
6、下面程序段的运行结果是_______。
x=2;do{printf("*");x--;)while(!x==0);7、下面程序段将输出computer。
请填空。
char c[]="It is a computer";for(i=0;_______;i++){_______;printf("%c",c[j]);}8、C语言提供的3种逻辑运算符是_______、_______、_______。
9、满足以下要求1的逻辑表达式是_______;满足以下要求2的逻辑表达式是_______。
要求1:判断坐标为(x,y)的点,在内径为a、外径为b、中心在0点上的圆环内的表达式。
要求2:写出x的值必须是2、4、6、7、8的判断表达式。
10、下面程序可求出图中方括号内的元素之积,请填空。
# include<stdio.h>int main(){ int x[3][3]={7,2,1,3,4,8,9,2,6};int s,*p;p=_______;s=*p*_______;printf("product=%d",s);return(0);}二、选择题11、若有代数式|x3+log10x|,则正确的C语言表达式是()A.fabs(x*3+log(x))B.abs(pow(x,3)+log(x))C.abs(pow(x,3.0)+log(x))D.yfabs(pow(x,3.0)+log(x))12、下面4个选项中,是不合法的浮点数的选项是( )。
C语言程序设计第5章“利用指针参数互换两个变量值”案例
C主讲教师崔玲玲5.1 “互换两个变量值”案例【案例说明】用函数实现两个变量值的互换使其在主调函数和被调函数中的值一致。
要求用指针变量作为函数参数。
程序运行结果如图5.1所示。
图5.1 互换两个变量值【案例目的】1 熟悉如何概念指针变量把握将指针变量作为函数参数的方式。
2 把握通过指针参数由被调函数向主调函数传递多个值的方式。
【技术要点】由于变量的值始终寄存在内存单元中因此要互换两个变量的值只需互换这两个变量对应的存储单元的值即可这就需要明白两个变量的地址。
也确实是说需要保证主调函数与被调函数中所要互换的两个数的内存单元是同一内存单元即传递的参数是内存单元的地址而不是内存单元中的值。
【相关知识及注意事项】1. 指针和地址2. 指针变量的概念及初始化3. 指针变量的赋值4. 指针变量的引用5. 指针作为函数参数5.2 “有序数列的插入”案例【案例说明】用指针法编程插入一个数到有序数列中。
程序运行结果如图5.7所示。
图5.7 有序数列的插入【案例目的】1 熟悉如何概念指针变量把握将指针变量指向一维数组元素的方式。
2 把握如安在一个有序的数列中查找适合的位置。
3 把握如何将一个数插入到一个有序数列中。
【技术要点】1 有序数组中插入一个数的关键是找到该数据插入的位置然后将插入位置及其后的所有元素均后移一名在空出的位置放入待插入的数据。
例如在13、27、3八、4九、6五、7六、97这列有序数据中插入53那个数成为新的有序数列13、27、3八、4九、53、6五、7六、97。
2 概念数组时必需多开辟一个存储单元用于寄存待插入的数据。
【相关知识及注意事项】1. 指针变量的运算2. 指针与一维数组5.3 “两个字符串首尾连接”案例【案例说明】编写程序将两个字符串首尾连接起来。
要求用字符指针变量处置。
程序运行结果如图5.9所示。
图5.9 两个字符串首尾连接【案例目的】1 学会概念基类型为字符型的指针变量并将指针变量指向串首的操作。
c语言中函数的形参类型
c语言中函数的形参类型在C语言中,函数通常需要接收一些数据或者指针作为输入,经过一些处理之后,输出结果或者修改输入内容。
这里的数据或者指针就对应函数的形参。
C语言中的函数形参类型主要包括基本数据类型、数组、结构体、联合体、指针和函数指针等,下面一一进行详细介绍。
1. 基本数据类型基本数据类型包括int、char、float、double等,它们是常用的数据类型,常常用于存储单个变量的值。
在函数中,我们可以定义基本数据类型的变量作为形参,这些变量的值可以在函数调用时传递进来。
例如,下面这个函数接收两个int类型的形参,计算它们的和并返回结果:int add(int a, int b) {return a + b;}2. 数组数组是一种有序的集合,它可以存储多个相同类型的数据。
在函数中,我们也可以定义数组作为形参。
首先,我们可以定义形参为一维数组,例如:void printArray(int arr[], int size) {for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}}上面的函数接收一个整型数组和数组的大小作为参数,并输出数组的元素。
在函数调用时,我们可以传递一个数组和它的大小进去。
下面是一个示例,它定义了一个结构体Person,包括姓名和年龄两个成员:现在我们可以定义一个函数,使用Person结构体作为形参:void printPerson(Person person) {printf("Name: %s, Age: %d\n", , person.age);}上面的函数接收一个Number联合体和一个type参数作为参数,并根据type的值输出Number的成员。
在函数调用时,我们可以传递一个Number类型的变量和一个type值进去。
5. 指针指针是一种特殊的变量,它存储了一个地址,可以用来访问内存中的数据。
《C语言程序设计(第五版)》习题答案
各章习题参考答案第1章习题参考答案1. 简述C程序的结构特点。
答:(1) 一个C语言源程序由一个或多个源文件组成。
每个源文件由一个或多个函数构成,其中有且仅有一个主函数(main函数)。
(2) 一个函数由函数首部(即函数的第一行)和函数体(即函数首部下面的大括号内的部分)组成。
函数首部包括函数类型、函数名和放在圆括号内的若干个参数。
函数体由声明部分和执行部分组成。
(3) C程序书写格式自由,一行内可以写多条语句,一个语句也可以分写在多行中,每个语句必须以分号结尾。
(4)程序的注释内容放在“/*”和“*/之”间,在‘/’和‘*’之间不允许有空格;注释部分允许出现在程序中的任何位置处。
2. 分析例1.3程序的结构。
答:下面是例1.3的程序,它的结构是:有且只有一个主函数main以及若干个其它函数,还有一个被主函数调用的sumab函数。
函数有首部,包括类型和名称,首部下的大括号中有变量定义、输入、计算和输出等语句。
#include <stdio.h>int sumab (int x, int y); /*函数声明*/int main () /*主函数*/{ int a,b,sum; /*定义变量*/printf("请输入变量a与b的值:"); /*提示信息*/scanf ("%d %d", &a, &b); /*输入变量a和b的值*/sum=sumab(a,b); /*调用sumab函数*/printf("a与b的和等于%d", sum);/*输出sum的值*/return 0;}int sumab (int x, int y) /*定义sumab函数,并定义形参x、y */{ int z;z=x+y;return z;}3. 分别编写完成如下任务的程序,然后上机编译、连接并运行。
(1) 输出两行字符,第1行是“The computer is our good friends!”,第2行是“We learnC language.”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
我们经常用的main函数都是不带参数的。
因此main 后的括号都是空括号。
实际上,main 函数可以带参数,这个参数可以认为是main函数的形式参数。
C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。
因此,main函数的函数头可写为:main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。
加上形参说明后,main函数的函数头应写为:
main (argc,argv)
int argv;
char *argv[];或写成:
main (int argc,char *argv[])
由于main函数不能被其它函数调用,因此不可能在程序内部取得实际值。
那么,在何处把实参值赋予main函数的形参呢? 实际上,main函数的参数值是从操作系统命令行上获得的。
当我们要运行一个可执行文件时,在DOS提示符下键入文件名,再输入实际参数即可把这些实参传送到main的形参中去。
DOS提示符下命令行的一般形式为:C:\>可执行文件名参数参数……; 但是应该特别注意的是,main 的两个形参和命令行中的参数在
位置上不是一一对应的。
因为,main的形参只有二个,而命令行中的参数个数原则上未加限制。
argc参数表示了命令行中参数的个数(注意:文件名本身也算一个参数),argc的值是在输入命令行时由系统按实际参数的个数自动赋予的。
例如有命令行为:C:\>E6 24 BASIC dbase FORTRAN由于文件名E6 24本身也算一个参数,所以共有4个参数,因此argc取得的值为4。
argv参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。
指针数组的长度即为参数个数。
数组元素初值由系统自动赋予。
其表示如图6.8所示:
main(int argc,char *argv){
while(argc-->1)
printf("%s\n",* argv);
}
本例是显示命令行中输入的参数如果上例的可执行文件名为e24.exe,存放在A驱动器的盘内。
因此输入的命令行为:C:\>a:e24 BASIC dBASE FORTRAN
则运行结果为:
BASIC
dBASE
FORTRAN
该行共有4个参数,执行main时,argc的初值即为4。
argv的4个元素分为4个字符串的首地址。
执行while语句,每循环一次argv值减1,当argv等于1时停止循环,共循环三次,因此共可输出三个参数。
在printf函数中,由于打印项* argv是先加1再打印,故第一次打印的是argv[1]所指的字符串BASIC。
第二、三次循环分别打印后二个字符串。
而参数e24是文件名,不必输出。
下例的命令行中有两个参数,第二个参数20即为输入的n值。
在程序中* argv的值为字符串“20”,然后用函数"atoi"把它换为整型作为while语句中的循环控制变量,输出20个偶数。
#include"stdlib.h"
main(int argc,char*argv[]){
int a=0,n;
n=atoi(* argv);
while(n--) printf("%d ",a *2);
}
本程序是从0开始输出n个偶数。
指向指针的指针变量如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。
在前面已经介绍过,通过指针访问变量称为间接访问,简称间访。
由于指针变量直接指向变量,所以称为单级间访。
而如果通过指向指针的指针变量来访问变量则构成了二级或多级间访。
在C语言程序中,对间访的级数并未明确限制,但是间访级数太多时不容易理解解,也容易出错,因此,一般很少超过二级间访。
指向指针的指针变量说明的一般形式为:
类型说明符** 指针变量名;
例如:int ** pp; 表示pp是一个指针变量,它指向另一个指针变量,而这个指针变量指向一个整型量。
下面举一个例子来说明这种关系。
main(){
int x,*p,**pp;
x=10;
p=&x;
pp=&p;
printf("x=%d\n",**pp);
}
上例程序中p 是一个指针变量,指向整型量x;pp也是一个指针变量,它指向指针变量p。
通过pp变量访问x的写法是**pp。
程序最后输出x的值为10。
通过上例,读者可以学习指向指针的指针变量的说明和使用方法。
下述程序中首先定义说明了指针数组ps并作了初始化赋值。
又说明了pps是一个指向指针的指针变量。
在5次循环中,pps 分别取得了ps[0],ps[1],ps[2],ps[3],ps[4]的地址值(如图6.10所示)。
再通过这些地址即可找到该字符串。
main(){
static char *ps[]={ "BASIC","DBASE","C","FORTRAN",
"PASCAL"};
char **pps;
int i;
for(i=0;i <5;i ){
pps=ps i;
printf("%s\n",*pps);
}
}
本程序是用指向指针的指针变量编程,输出多个字符串
网友回复:我刚接触到这两个变量时,根本不知道它们是用来做什么的,我想很多人也跟我一样,刚看到这两个变量时也是稀里糊涂的。
其实: int main(int argc,char *argv[]) 是UNIX 和Linux 中的标准写法,而int main() 只是UNIX 及Linux 默许的用法..
那究竟argc,argv[] 有何之用呢?下面看个例子edit.c 就会明白它们的用法了:
#include <unistd.h>
#include <stdio.h>
int main(int argc,char *argv[])
{
if(argc==1 || argc>2) {
printf("请输入想要编辑的文件名如:./edit fillen");
}
if(argc==2) {
printf("编辑%sn",argv[1]);
}
exit(0)
}
编译该程序:gcc -o edit edit.c
运行:./edit
结果:请输入想要编辑的文件名如:./edit fille
运行:./edit edit.txt
结果:编辑edit.txt
看到这里argc,argv[] 如何用就很明白了,argc 是外部命令参数的个数,argv[] 存放各参数的内容,如上例:执行 ./edit 时,argc 为1,
argv[0] 为 ./edit .而执行 ./edit edit.txt 时,argc 的值为2,
argv[0] 为 ./edit,argv[1] 为edit.txt .
网友回复:简单的说,就是命令行参数!
argc 是外部命令参数的个数,argv[] 存放各参数的内容,如上例:执行 ./edit 时,argc 为1,
argv[0] 为 ./edit .而执行 ./edit edit.txt 时,argc 的值为2,
argv[0] 为 ./edit,argv[1] 为edit.txt .
网友回复:int argc 参数个数
char** argv 参数数组,,数组大小就是前面那个参数,通过数组下标访问里面存放的内容,例如argv[0],argv[1]
网友回复:int main(int argc,char** argv)
{
FILE *fp;
fp = fopen("E:\works\ee\debug\1.txt","r");
为什么这个fp指针还是为空了???网友回复:指针使用之前应该进行初始化。