㈠ c語言如何定義一個函數可以返回多個值回去給主函數呀。
函數的返回值頂多是一個數,通過函數直接返回的這個數只有在是指針時才能給出多個數據結果。
可以考慮以下幾個方法:
返回指針:
int*display() {int *p;p=malloc(sizeof(int)*6); ... return p;} //用p[0]~p[5]計算各位
void main() {int*p; p=display(); ... free(p);}
使用全局變數:將shiwa,wa,qiao,,shi,ge定義成全局變數,然後子程序和主程序直接用
使用函數參數:
void display(int* shiwa,int* wa,int* qiao,int* ,int* shi,int ge)
函數中用類似這樣的用法計算:(*ge)=Data%10;
void main() {int shiwa,wa,qiao,,shi,ge; display(&shiwa,&wa,&qiao,&,&shi,&ge)}
用一個足夠長的數返回:
long display() {long n;... n=shiwa; n*=10; n+=wa; n*=10; n+=qiao; n*=10; n+=; n*=10; n+=shi; n*=10; n+=ge; return n;}
void main() {int wa; long n; n=display(); wa=n/10000; wa%=10;}
㈡ C語言自定義函數怎麼傳參,一次性把數組的數據全部傳入
數組參數屬於指針參數.
指針參數即時傳址參數(或叫引用參數), 如果想在函數中修改參數的值, 這是唯一的途徑.
如果把數組當作參數, 不管你願攔純意與否, 它就是指針, 指向第一個值的指針.
1. 數組參數就是指向第一個元素的指針: #include <stdio.h>
void getArr(int p[], int si);
int main(void)
{
int ns[] = {1,2,3,4,5};
getArr(ns, sizeof(ns)/sizeof(ns[0]));
getchar();
return 0;
}
void getArr(int p[], int si) {
int i;
for (i = 0; i < si; i++) {
printf("%d\n", p[i]);
}
}
2. 乾脆直接聲明為指針: #include <stdio.h>
void getArr(int *p, int si);
int main(void)
{
int ns[] = {1,2,3,4,5};
getArr(ns, sizeof(ns)/sizeof(ns[0]));
getchar();
return 0;
}
void getArr(int *p, int si) {
int i;
for (i = 0; i < si; i++) {
printf("%d\n", p[i]);
}
}
3. 即簡團咐使你在形參中指定維數也不起作用: #include <stdio.h>
void getArr(int p[2], int si);
int main(void)
{
int ns[] = {1,2,3,4,5};
getArr(ns, sizeof(ns)/sizeof(ns[0]));
getchar();
return 0;
}
void getArr(int p[2], int si) {
int i;
for (i = 0; i < si; i++) {
printf("%d\n", p[i]);
}
}
4. 既然是指針, 其值就有被修改的可能: #include <stdio.h>
void getArr(int p[], int si);
int main(void)
{
int ns[] = {1,2,3,4,5};
size_t i;
getArr(ns, sizeof(ns)/sizeof(ns[0]));
for (i = 0; i < sizeof(ns)/sizeof(ns[0]); i++) {
printf("%d\n", *(ns+i));
}
getchar();
return 0;
}
void getArr(int p[], int si) {
int i;
for (i = 0; i < si; i++) {
p[i]++;
}
}
5. 如果是字元數組, 它自己能判斷數組尾界: #include <stdio.h>
void getArr(char p[]);
int main(void)
{
char ns[] = "ABCDEFG";
getArr(ns);
getchar();
return 0;
}
void getArr(char p[]) {
int i;
for (i = 0; p[i]; i++) {
printf("%c: %d\n"或老, p[i], p[i]);
}
}
㈢ c語言自定義函數怎麼帶參數
舉個栗子,比如計算a+b的值的函數
#include<stdio.h>
intplus(inta,intb)
{
intc=a+b;//2.此處定義的c無法被主函數直接調用,因為c為局部變數
returnc;//3.要返回計算結果,只能用return語句
}
intmain()
{
inti=5,j=7;
intans=plus(i,j);//1.該過程中,首先將i,j作為參數(與上面的plus函數說明(m,n)一一對應)傳遞給plus函數。
printf("%d",ans);
}
㈣ 這個c語言的主函數的兩個參數怎麼加進去啊
argc代表參數數量,後面的數組代表參數
我們經常用的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參數是字元串指針數組,其各元素值為命令行中各字元串(參數均按字元串處理)的首地址。 指針數組的長度即為參數個數。數組元素初值由系統自動賦予。
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是文件名,不必輸出
㈤ 如何在C語言中定義參數數目可變的函數
定義如下:
<函數返回值> 函數名(形參1, 形參2, ...)
舉例說明:
intfunc(inta,intb,...)
{
//函數體
......
}
printf()函數就是一個參數可變的函數,其函數原型為:
intprintf(constchar*__format,...);