当前位置:首页 » 编程语言 » c语言数组的调用函数

c语言数组的调用函数

发布时间: 2022-07-27 23:49:00

c语言中怎么调用函数谢谢

C语言中,函数调用的一般形式为:函数名(实际参数表)对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。

#include<stdio.h>

int fun(int x, int y); // 函数声明,如果函数写在被调用处之前,可以不用声明

void main()

{

int a=1, b=2, c;

c = fun(a, b); // 函数的调用,调用自定义函数fun,其中a,b为实际参数,传递给被调用函数的输入值

}

// 自定义函数fun

int fun(int x, int y) // 函数首部

{ // {}中的语言为函数体

return x>y ? x : y; // 返回x和y中较大的一个数

}

函数实参

函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。例如: printf("%d",max(x,y)); 即是把max调用的返回值又作为printf函数的实参来使用的。在函数调用中还应该注意的一个问题是求值顺序的问题。

所谓求值顺序是指对实参表中各量是自左至右使用呢,还是自右至左使用。对此,各系统的规定不一定相同。介绍printf 函数时已提到过,这里从函数调用的角度再强调一下。

以上内容参考:网络-函数调用

㈡ 用C语言写了一个输入一个一维数组的函数,如何在后来写的函数中调用该数组

在C语言中,无法直接返回一个数组,但是可以通过返回对应类型指针的方式,返回数组。

在大多数情况下,一维数组和一维指针是可以通用的。

比如,定义一个函数,申请一定长度的整型动态数组,其长度用参数传入,并将结果返回。如出错,返回空指针NULL。

代码可以写成如下形式:

int*int_array_create(int n)//参数n为数组元素个数

{

int*r;

if(n&lt;=0)return NULL;//参数错误

r=(int*)malloc(sizeof(int)*n);//申请内存空间,大小为n个int长度。

return r;//返回得到的整型数组的指针。

}

(2)c语言数组的调用函数扩展阅读:

return是C++的关键字,它提供了终止函数执行的一种方式。当return语句提供了一个值时,这个值就成为函数的返回值.

说到return,有必要提及主函数的定义,下面是从网络上找到的资料,好好消化吧,对了解主函数中返回值的理解有很大的帮助.

很多人甚至市面上的一些书籍,都使用了void main(),其实这是错误的。C/C++中从来没有定义过void main()。

C++之父Bjarne Stroustrup在他的主页上的FAQ中明确地写着The definition void main(){/*...*/}is not and never has been C++,nor has it even been C.(void main()

从来就不存在于C++或者C)。下面我分别说一下C和C++标准中对main函数的定义。

1、C

在C89中,main()是可以接受的。Brian W.Kernighan和Dennis M.Ritchie的经典巨着The C programming Language 2e(《C程序设计语言第二版》)用的就是main()。不过在最新的C99标准中,只有以下两种定义方式是正确的:

int main(void)

int main(int argc,char*argv[])

(参考资料:ISO/IEC 9899:1999(E)Programming languages—C 5.1.2.2.1 Program startup)

当然,我们也可以做一点小小的改动。例如:char*argv[]可以写成char**argv;argv和argc可以改成别的变量名(如intval和charval),不过一定要符合变量的命名规则。

如果不需要从命令行中获取参数,请用int main(void);否则请用int main(int argc,char*argv[])。

main函数的返回值类型必须是int,这样返回值才能传递给程序的激活者(如操作系统)。

如果main函数的最后没有写return语句的话,C99规定编译器要自动在生成的目标文件中(如exe文件)加入return 0;,表示程序正常退出。不过,我还是建议你最好在main函数的最后加上return语句,虽然没有这个必要,但这是一个好的习惯。

注意,vc6不会在目标文件中加入return 0;,大概是因为vc6是98年的产品,所以才不支持这个特性。现在明白我为什么建议你最好加上return语句了吧!不过,gcc3.2(Linux下的C编译器)会在生成的目标文件中加入return 0;。

2、C++

C++98中定义了如下两种main函数的定义方式:

int main()

int main(int argc,char*argv[])

(参考资料:ISO/IEC 14882(1998-9-01)Programming languages—C++3.6 Start and termination)

int main()等同于C99中的int main(void);int main(int argc,char*argv[])的用法也和C99中定义的一样。同样,main函数的返回值类型也必须是int。

如果main函数的末尾没写return语句,C++98规定编译器要自动在生成的目标文件中加入return 0;。同样,vc6也不支持这个特性,但是g++3.2(Linux下的C++编译器)支持。

3、关于void main

在C和C++中,不接收任何参数也不返回任何信息的函数原型为“void foo(void);”。可能正是因为这个,所以很多人都误认为如果不需要程序返回值时可以把main函数定义成void main(void)。然而这是错误的!main函数的返回值应该定义为int类型,C和C++标准中都是这样规定的。

虽然在一些编译器中,void main可以通过编译(如vc6),但并非所有编译器都支持void main,因为标准中从来没有定义过void main。

g++3.2中如果main函数的返回值不是int类型,就根本通不过编译。而gcc3.2则会发出警告。所以,如果你想你的程序拥有很好的可移植性,请一定要用int main。

4、返回值的作用

main函数的返回值用于说明程序的退出状态。如果返回0,则代表程序正常退出,否则代表程序异常退出。下面我们在winxp环境下做一个小实验。首先编译下面的程序:

int main(void)

{

return 0;

}

然后打开附件里的“命令提示符”,在命令行里运行刚才编译好的可执行文件,然后输入“echo%ERRORLEVEL%”,回车,就可以看到程序的返回值为0。

假设刚才编译好的文件是a.exe,如果输入“a&&dir”,则会列出当前目录下的文件夹和文件。但是如果改成“return-1”,或者别的非0值,重新编译后输入“a&&dir”,则dir不会执行。

因为&&的含义是:如果&&前面的程序正常退出,则继续执行&&后面的程序,否则不执行。也就是说,利用程序的返回值,我们可以控制要不要执行下一个程序。这就是int main的好处。

如果你有兴趣,也可以把main函数的返回值类型改成非int类型(如float),重新编译后执行“a&&dir”,看看会出现什么情况,想想为什么会出现那样的情况。顺便提一下,如果输入a||dir的话,则表示如果a异常退出,则执行dir。

㈢ c语言数组函数调用

程序是什么功能,有什么错误 ,请说明。 追问: 编写程序求两个整数的所有质公约数、最大公约数、最小公倍数和两个数之差的绝对值。要求分别编写五个函数分别实现求两个整数的最小质公约数int zgys(int x,int y)、所有质公约数void zgyssz(int a[100],int x,int y)、最大公约数int gys(int x,int y)、最小公倍数int gbs(int x,int y)和两个数之差的绝对值int fun(int x,int y)。 void zgyssz(int a[100],int x,int y) { int i; int zgys(int x,int y); for(i=0;i<100;i++) { a[i]=zgys(x,y); if(a[i]==1)break; x=x/a[i];y=y/a[i]; } } int gys(int x,int y) { int i,j=0,a[100]; void zgyssz(int a[100],int,int); zgyssz(a[100],x,y); { int t=1; for(i=0;i<j;i++)t=t*a[i]; return t; } } 回答: 哪些函数是对应的功能。还有,不是要5个函数吗,怎么只有三个的。 追问: void zgyssz(int a[100],int x,int y) { int i; int zgys(int x,int y); for(i=0;i<100;i++) { a[i]=zgys(x,y); if(a[i]==1)break; x=x/a[i];y=y/a[i]; } } int gys(int x,int y) { int i,j=0,a[100]; void zgyssz(int a[100],int,int); zgyssz(a[100],x,y); { int t=1; for(i=0;i<j;i++)t=t*a[i]; return t; } } 那三个是 int zgys(int x,int y) { int f=1,i,min; min=x<y?x:y; for(i=2;i<=min;i++) {/*判断i是否是x与y的公约数*/ if(x%i==0&&y%i==0) f=i; break; } return f; } int gbs(int x,int y) { return x*y/gys(x,y); } int fun(int x,int y) { if(x<y)return y-x; else return x-y; } 这三个我做出来了。 回答: 直接说,哪个函数是什么功能的就行了。还有就是,哪个函数有问题。 追问: 最小公倍数 int gbs(int x,int y){ return x*y/gys(x,y);} 两个数之差的绝对值 int fun(int x,int y){ if(x<y)return y-x; else return x-y;} 求两个整数的最小质公约数 int zgys(int x,int y){ int f=1,i,min; min=x<y?x:y; for(i=2;i<=min;i++) {/*判断i是否是x与y的公约数*/ if(x%i==0&&y%i==0) f=i; break; } return f;} 求两个整数的所有质公约数 void zgyssz(int a[100],int x,int y) { int i; int zgys(int x,int y); for(i=0;i<100;i++) { a[i]=zgys(x,y); if(a[i]==1)break; x=x/a[i];y=y/a[i]; }} 求两个整数的最大公约数 int gys(int x,int y){ int i,j=0,a[100]; void zgyssz(int a[100],int,int); zgyssz(a[100],x,y); { int t=1; for(i=0;i<j;i++)t=t*a[i]; return t; }} 后两个有问题,弄不出来 回答: #include<stdio.h> int n; void main() { int zgys(int x,int y); void zgyssz(int a[ ],int x,int y); int gys(int x,int y); int a,b,c; printf("请输入两个数:"); scanf("%d%d",&a,&b); c=gys(a,b); printf("%d\n",c); } void zgyssz(int a[ ],int x,int y) { int i; int zgys(int x,int y); for(i=0;i<100;i++) { a[i]=zgys(x,y); if(a[i]==1)break; x=x/a[i];y=y/a[i]; } n=i+1; } int gys(int x,int y) { int i,j=0,a[100]; void zgyssz(int a[100],int,int); zgyssz(a,x,y); { int t=1; for(i=0;i<n;i++)t=t*a[i];//这里的个数应该是a[i]的个数n。定为全局变量 return t; } } int zgys(int x,int y) { int f=1,i,min; min=x<y?x:y; for(i=2;i<=min;i++) { if(x%i==0&&y%i==0) { f=i; break; //break要放里面。 } } return f; }

希望采纳

㈣ C语言 怎么调用指针数组函数

1.函数指针的数组定义方法:返回值类型( * 指针变量名[Number]) (形参列表)。
例如:
double add(double a,double b){};
double sub(double a,double b){};
double mul(double a,double b){};
double div1(double a,double b){};
double (*oper_func[])(double, double) = {add,sub,mul,div1};//函数指针的数组定义

2.函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。

3.函数指针的声明方法为:
返回值类型( * 指针变量名) (形参列表);
“返回值类型”说明函数的返回类型,“( * 指针变量名)”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f = func; /* 将func函数的首地址赋给指针f */
或者使用下面的方法将函数地址赋给函数指针:
f = &func;
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
例子:

#include<stdio.h>
intmax(intx,inty){return(x>y?x:y);}
intmain(){
int(*ptr)(int,int);
inta,b,c;
ptr=max;
scanf("%d%d",&a,&b);
c=(*ptr)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
return0;
}

㈤ C语言怎么调用含有数组的函数

voidfun1(inta[10])
{}
intmain()
{
inta[10];
fun1(a);
}

你是问这个吗?

㈥ 关于c语言中数组作为函数参数的函数之间调用问题

1、新建一个数组作为参数项目,如图所示:

㈦ C语言调用带数组的函数为什么要这么写

首先int max(int a[])这个函数参数的意思是接受一个数组的首地址,也就是说调用的时候必须是地址,也可以说是指针;
如果调用写成max(a[10]),这里面a[10]为第十一个元素的值当然不行了,除非你就是把地址放在里面了,强制有的编译器应该可以通过但是会有警告。
其实理解了的话max(a)和max(&a[0])都是可以的,都表示把数组a的首地址传过去。
可以多去了解一下指针,多上机操作,多练练就会理解的越深。

㈧ C语言 数组 调用函数

对于有数组参数的函数,编译程序要为其开辟相应的内存空间,而程序中两个函数
都有数组参数a[n][m],由于n,m是变量,编译程序并不知道n,m的具体值,所以不能
通过编译。
修改:
1.在#include<>下面添加以下伪指令:
#define n 5
#define m 5
2.将函数的参数形式改为:
int sum(int a[n][m]);
void pl(int a[n][m]);
并按此修改程序文件中所有关于这两个函数的申明和调用即可

㈨ C语言的函数调用和数组,eg:void abd(int arr[])

函数返回值类型:(void)也就是不需要返回值。
函数名:abd
函数参数:int型数组
这里调用的时候,需要给函数abd一个参数,可以是数组名,也可以是一个指向int数组的指针。
注意数组参数为数组,是传址,也就是说如果abd函数对arr形参操作会改变外部函数实参的值。

㈩ C语言数组怎么调用

有好几种方法,我稍微说一下,你回去找书看一看:
通过数组首地址 指针 带下标的指针引用一维数组元素。
引用一维数组中的某一个元素的方法:
* :求当前地址的内容 & :求当前内容的地址
1 a【i】
2 *&a【i】 //*在定义语句时代表定义一个指针变量,当在执行语句部分时代表间址运算符,引用一个指针变量指向的地址的内容。&叫求地址运算符,求当前内容的地址。所以*和&就像乘号和除号一样,互相抵消了。
3 *(a+i):在数组名的地址上,加上i个存储单元。代表第(i+1)个元素,用间址运算符引用它,即等价于a[i]
4 当(p=a;||p=&a【0】) 则 *(p+i)等价于a[i]
5 当(p=a;||p=&a[0]) 则 p[i] 等价于 a[i] //方括号不仅表示数组元素的记方括号不仅表示数组元素的记方括号不仅表示数组元素的记方括号不仅表示数组元素的记号号号号,也是一种运算符也是一种运算符也是一种运算符也是一种运算符.
总结:引用一维数组元素 a[i] 的四种方法: a[i] *(a+i) 若p=a, 则 p[i] *(p+i) 表示a[i]的地址的方法:&a[i] a+i p+i 都表示当前数组第i个元素的地址。
http://wenku..com/view/46092a66783e0912a2162a27.html这是引用的网页,你可以自己去看看!

热点内容
跳转页源码 发布:2024-09-17 03:13:05 浏览:543
html文件上传表单 发布:2024-09-17 03:08:02 浏览:784
聊天软件编程 发布:2024-09-17 03:00:07 浏览:726
linuxoracle安装路径 发布:2024-09-17 01:57:29 浏览:688
两个安卓手机照片怎么同步 发布:2024-09-17 01:51:53 浏览:207
cf编译后没有黑框跳出来 发布:2024-09-17 01:46:54 浏览:249
安卓怎么禁用应用读取列表 发布:2024-09-17 01:46:45 浏览:524
win10设密码在哪里 发布:2024-09-17 01:33:32 浏览:662
情逢敌手迅雷下载ftp 发布:2024-09-17 01:32:35 浏览:337
安卓如何让软件按照步骤自动运行 发布:2024-09-17 01:28:27 浏览:197