當前位置:首頁 » 編程語言 » 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這是引用的網頁,你可以自己去看看!

熱點內容
db2新建資料庫 發布:2024-09-08 08:10:19 瀏覽:171
頻率計源碼 發布:2024-09-08 07:40:26 瀏覽:778
奧迪a6哪個配置帶後排加熱 發布:2024-09-08 07:06:32 瀏覽:100
linux修改apache埠 發布:2024-09-08 07:05:49 瀏覽:208
有多少個不同的密碼子 發布:2024-09-08 07:00:46 瀏覽:566
linux搭建mysql伺服器配置 發布:2024-09-08 06:50:02 瀏覽:995
加上www不能訪問 發布:2024-09-08 06:39:52 瀏覽:811
銀行支付密碼器怎麼用 發布:2024-09-08 06:39:52 瀏覽:513
蘋果手機清理瀏覽器緩存怎麼清理緩存 發布:2024-09-08 06:31:32 瀏覽:554
雲伺服器的優點與缺點 發布:2024-09-08 06:30:34 瀏覽:735