當前位置:首頁 » 編程語言 » c語言調用函數數組

c語言調用函數數組

發布時間: 2022-07-18 11:39:18

① 用c語言寫了一個輸入一個一維數組的函數,如何在後來寫的函數中調用該數組

在C語言中,無法直接返回一個數組,但是可以通過返回對應類型指針的方式,返回數組。

在大多數情況下,一維數組和一維指針是可以通用的。

比如,定義一個函數,申請一定長度的整型動態數組,其長度用參數傳入,並將結果返回。如出錯,返回空指針NULL。

代碼可以寫成如下形式:

int*int_array_create(int n)//參數n為數組元素個數

{

int*r;

if(n<=0)return NULL;//參數錯誤

r=(int*)malloc(sizeof(int)*n);//申請內存空間,大小為n個int長度。

return r;//返回得到的整型數組的指針。

}

(1)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語言數組怎麼調用

有好幾種方法,我稍微說一下,你回去找書看一看:
通過數組首地址 指針 帶下標的指針引用一維數組元素。
引用一維數組中的某一個元素的方法:
* :求當前地址的內容 & :求當前內容的地址
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這是引用的網頁,你可以自己去看看!

③ 關於c語言中數組作為函數參數的函數之間調用問題

1、新建一個數組作為參數項目,如圖所示:

④ C語言調用帶數組的函數為什麼要這么寫

首先int max(int a[])這個函數參數的意思是接受一個數組的首地址,也就是說調用的時候必須是地址,也可以說是指針;
如果調用寫成max(a[10]),這裡面a[10]為第十一個元素的值當然不行了,除非你就是把地址放在裡面了,強制有的編譯器應該可以通過但是會有警告。
其實理解了的話max(a)和max(&a[0])都是可以的,都表示把數組a的首地址傳過去。
可以多去了解一下指針,多上機操作,多練練就會理解的越深。

⑤ c語言中調用函數的返回值,如果是數組,主函數要輸出這個數組怎麼實現啊

用指針,另外保存數據的變數退出函數時不得消失。

例如:

#include<stdio.h>

int * fun(int n)

{

int i;

static int a[100]; // 這里用static

for (i=0;i<n;i++) a[i]=i;

return &a[0];

}

void main()

{

int i,n=5;

int *p; // 聲明指針

p = fun(n); // 返回指針

for (i=0;i<n;i++) printf("%d ",p[i]); // 把 p 看成數組來輸出

}

得 0 1 2 3 4

(5)c語言調用函數數組擴展閱讀:

注意事項

1、數組的維度必須是一個常量表達式

int main(void)

{

constexpr int i = 20;

int j = 5;//不是常量表達式

int arr1[i];//正確

int arr2[j];//錯誤

system("pause");

return 0;

}

2、默認情況下,數組的元素被默認初始化。

而且需要注意的是,和內置類型的變數一樣,如果在函數內部定義了某種內置類型的數組,那麼默認初始化會令數組有未定義的值。

⑥ C語言的函數調用和數組,eg:void abd(int arr[])

函數返回值類型:(void)也就是不需要返回值。
函數名:abd
函數參數:int型數組
這里調用的時候,需要給函數abd一個參數,可以是數組名,也可以是一個指向int數組的指針。
注意數組參數為數組,是傳址,也就是說如果abd函數對arr形參操作會改變外部函數實參的值。

⑦ c語言 函數調用數組

#include<stdio.h>
void max(int a[2])
{
printf("%d",*(a+1));
}

void main()
{
int a[2] = { 10,20 };
max(a);
}

⑧ C語言如何才能調用這個函數排序的數組

#include #include #include #define MAXlen 100 void select_sort(int *x, int n) { //選擇排序 int i, j, min; int t; for (i = 0; i < n - 1; i++) { // 要選擇的次數:0~n-2共n-1次 min = i; // 假設當前下標為i的數最小,比較後再調整 for (j = i + 1; j < n; j++) { //循環找出最小的數的下標是哪個 if (*(x + j) < *(x + min)) { min = j; // 如果後面的數比前面的小,則記下它的下標 } } if (min != i) { // 如果min在循環中改變了,就需要交換數據 t = *(x + i); *(x + i) = *(x + min); *(x + min) = t; } } } int main() { int i; int iArr[MAXlen]; srand((unsigned int)time(NULL)); printf("\n排序前:\n"); for(i = 0 ; i < MAXlen ; i++) { iArr[i] = (unsigned int)rand() % 1000; if(i % 10 == 0) printf("%\n"); printf("%5d",iArr[i]); } printf("\n"); select_sort(iArr,MAXlen); printf("\n排序後:\n"); for(i = 0 ; i < MAXlen ; i++) { if(i % 10 == 0) printf("%\n"); printf("%5d",iArr[i]); } printf("\n\n"); return 0; }

⑨ 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; }

希望採納

熱點內容
絕對賽車3安卓在哪裡下載 發布:2025-02-01 12:42:30 瀏覽:715
mysql修改資料庫字元 發布:2025-02-01 12:37:52 瀏覽:567
阿里雲伺服器出廠密碼是多少 發布:2025-02-01 12:35:43 瀏覽:665
手機傳文件伺服器和ip地址 發布:2025-02-01 12:15:01 瀏覽:657
兒子編程課 發布:2025-02-01 12:15:00 瀏覽:901
zsh腳本 發布:2025-02-01 12:13:48 瀏覽:595
android亮度獲取 發布:2025-02-01 12:09:10 瀏覽:624
小孩什麼時候學編程比較好 發布:2025-02-01 12:03:10 瀏覽:960
c語言的認識 發布:2025-02-01 11:58:03 瀏覽:521
svn連接伺服器地址 發布:2025-02-01 11:51:31 瀏覽:416