① c語言中寫子函數時候怎麼確定子函數類型
函數定義的一般形式 1.無參函數的一般形式 類型說明符 函數名() { 類型說明 語句 } 其中類型說明符和函數名稱為函數頭。 類型說明符指明了本函數的類型,函數的類型實際上是函數返回值的類型。 該類型說明符與第二章介紹的各種說明符相同。 函數名是由用戶定義的標識符,函數名後有一個空括弧,其中無參數,但括弧不可少。{} 中的內容稱為函數體。在函數體中也有類型說明, 這是對函數體內部所用到的變數的類型說明。在很多情況下都不要求無參函數有返回值, 此時函數類型符可以寫為void。 我們可以改為一個函數定義: void Hello() { printf ("Hello,world \n"); } 這里,只把main改為Hello作為函數名,其餘不變。Hello 函數是一個無參函數,當被其它函數調用時,輸出Hello world字元串。 2.有參函數的一般形式 類型說明符 函數名(形式參數表) 型式參數類型說明 { 類型說明 語句 } 有參函數比無參函數多了兩個內容,其一是形式參數表, 其二是形式參數類型說明。在形參表中給出的參數稱為形式參數, 它們可以是各種類型的變數, 各參數之間用逗號間隔。在進行函數調用時,主調函數將賦予這些形式參數實際的值。 形參既然是變數,當然必須給以類型說明。例如,定義一個函數, 用於求兩個數中的大數,可寫為: int max(a,b) int a,b; { if (a>b) return a; else return b; } 第一行說明max函數是一個整型函數,其返回的函數值是一個整數。形參為a,b。第二行說明a,b均為整型量。 a,b 的具體值是由主調函數在調用時傳送過來的。在{}中的函數體內, 除形參外沒有使用其它變數,因此只有語句而沒有變數類型說明。 上邊這種定義方法稱為「傳統格式」。 這種格式不易於編譯系統檢查,從而會引起一些非常細微而且難於跟蹤的錯誤。ANSI C 的新標准中把對形參的類型說明合並到形參表中,稱為「現代格式」。 例如max函數用現代格式可定義為: int max(int a,int b) { if(a>b) return a; else return b; } 現代格式在函數定義和函數說明(後面將要介紹)時, 給出了形式參數及其類型,在編譯時易於對它們進行查錯, 從而保證了函數說明和定義的一致性。例1.3即採用了這種現代格式。 在max函數體中的return語句是把a(或b)的值作為函數的值返回給主調函數。有返回值函數中至少應有一個return語句。 在C程序中,一個函數的定義可以放在任意位置, 既可放在主函數main之前,也可放在main之後。例如例1.3中定義了一個max 函數,其位置在main之後, 也可以把它放在main之前。 修改後的程序如下所示。 int max(int a,int b) { if(a>b)return a; else return b; } void main() { int max(int a,int b); int x,y,z; printf("input two numbers:\n"); scanf("%d%d",&x,&y); z=max(x,y); printf("maxmum=%d",z); } 現在我們可以從函數定義、 函數說明及函數調用的角度來分析整個程序,從中進一步了解函數的各種特點。程序的第1行至第5行為max函數定義。進入主函數後,因為准備調用max函數,故先對max函數進行說明(程序第8行)。函數定義和函數說明並不是一回事,在後面還要專門討論。 可以看出函數說明與函數定義中的函數頭部分相同,但是末尾要加分號。程序第12 行為調用max函數,並把x,y中的值傳送給max的形參a,b。max函數執行的 結果 (a或b)將返回給變數z。最後由主函數輸出z的值。 函數調用的一般形式前面已經說過,在程序中是通過對函數的調用來執行函數體的,其過程與其它語言的子程序調用相似。C語言中, 函數調用的一般形式為: 函數名(實際參數表) 對無參函數調用時則無實際參數表。 實際參數表中的參數可以是常數,變數或其它構造類型數據及表達式。 各實參之間用逗號分隔。'Next of Page在C語言中,可以用以下幾種方式調用函數: 1.函數表達式 函數作表達式中的一項出現在表達式中,以函數返回值參與表達式的運算。這種方式要求函數是有返回值的。例如: z=max(x,y)是一個賦值表達式,把max的返回值賦予變數z。'Next of Page 2.函數語句 函數調用的一般形式加上分號即構成函數語句。例如: printf ("%D",a);scanf ("%d",&b);都是以函數語句的方式調用函數。 3.函數實參 函數作為另一個函數調用的實際參數出現。 這種情況是把該函數的返回值作為實參進行傳送,因此要求該函數必須是有返回值的。例如: printf("%d",max(x,y)); 即是把max調用的返回值又作為printf函數的實參來使用的。在函數調用中還應該注意的一個問題是求值順序的問題。 所謂求值順序是指對實參表中各量是自左至右使用呢,還是自右至左使用。 對此, 各系統的規定不一定相同。在3.1.3節介紹printf 函數時已提 到過,這里從函數調用的角度再強調一下。 看例5.2程序。 void main() { int i=8; printf("%d\n%d\n%d\n%d\n",++i,--i,i++,i--); } 如按照從右至左的順序求值。例5.2的運行結果應為: 8 7 7 8 如對printf語句中的++i,--i,i++,i--從左至右求值,結果應為: 9 8 8 9 應特別注意的是,無論是從左至右求值, 還是自右至左求值,其輸出順序都是不變的, 即輸出順序總是和實參表中實參的順序相同。由於Turbo C現定是自右至左求值,所以結果為8,7,7,8。上述問題如還不理解,上機一試就明白了。函數的參數和函數的值 一、函數的參數 前面已經介紹過,函數的參數分為形參和實參兩種。 在本小節中,進一步介紹形參、實參的特點和兩者的關系。 形參出現在函數定義中,在整個函數體內都可以使用, 離開該函數則不能使用。實參出現在主調函數中,進入被調函數後,實參變數也不能使用。 形參和實參的功能是作數據傳送。發生函數調用時, 主調函數把實參的值傳送給被調函數的形參從而實現主調函數向被調函數的數據傳送。 函數的形參和實參具有以下特點: 1.形參變數只有在被調用時才分配內存單元,在調用結束時, 即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。 函數調用結束返回主調函數後則不能再使用該形參變數。 2.實參可以是常量、變數、表達式、函數等, 無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應預先用賦值,輸入等辦法使實參獲得確定值。 3.實參和形參在數量上,類型上,順序上應嚴格一致, 否則會發生「類型不匹配」的錯誤。 4.函數調用中發生的數據傳送是單向的。 即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。 因此在函數調用過程中,形參的值發生改變,而實參中的值不會變化。例5.3可以說明這個問題。 void main() { int n; printf("input number\n"); scanf("%d",&n); s(n); printf("n=%d\n",n); } int s(int n) { int i; for(i=n-1;i>=1;i--) n=n+i; printf("n=%d\n",n); } 本程序中定義了一個函數s,該函數的功能是求∑ni=1i 的值。在主函數中輸入n值,並作為實參,在調用時傳送給s 函數的形參量n( 注意,本例的形參變數和實參變數的標識符都為n, 但這是兩個不同的量,各自的作用域不同)。 在主函數中用printf 語句輸出一次n值,這個n值是實參n的值。在函數s中也用printf 語句輸出了一次n值,這個n值是形參最後取得的n值0。從運行情況看,輸入n值為100。即實參n的值為100。把此值傳給函數s時,形參 n 的初值也為100,在執行函數過程中,形參n的值變為5050。 返回主函數之後,輸出實參n的值仍為100。可見實參的值不隨形參的變化而變化。
② C語言函數類型
看你要這個函數干什麼了
例如:show函數定義為{
printf("hello\n")
},是為了輸出,無return語句,則定義為void類型
sum函數定義為{
int
sum
=
a
+
b;return
sum;}是為了加兩個數,有return語句,return後為一int類型,所以定義為int類型
③ C語言中允許默認的函數類型是什麼
int。C語言規定:在定義函數時,若其返回值類型為int,則可以默認。
C語言函數有三類,分為外部函數、靜態函數、內聯函數,其中前兩種是C89標准支持,第三種是C99標准增加的。
1、外部函數
這類函數是默認的函數類型,基本上平時我們使用的就是這種函數,聲明有以下兩種方式,例如:
// 使用extern關鍵字,顯示聲明
extern int add(int a, int b);
// 或省略關鍵字extern,編譯器也會自動認為是extern
int add(int a, int b);
外部函數表明在當前聲明和定義的代碼文件中可以使用,也可以在其它代碼文件中可以通過#include指令包含使用,對外部的代碼可見。
2、靜態函數
這類函數其實與外部函數相對的,因為需要使用static關鍵字修飾,因此稱為靜態函數,其實就是內部函數。聲明方式如下,例如:
static int add(int a, int b);
靜態函數的作用域只能在當前聲明和定義的文件中,在其它代碼文件中無法#include使用,因此在整個程序中,特別是大型程序,有多個源代碼文件時,即使定義相同名稱的兩個靜態函數,也不會有命名和使用沖突。
3、內聯函數
是新增的特性,使用inline關鍵字聲明和定義,該類函數類似#define宏定義展開,編譯時會直接將函數定義代碼在調用的地方復制展開,這樣會減少函數調用的開銷,提高運行效率。
inline int add(int a, int b);
內聯函數適合短小的、被頻繁調用的函數,對於復雜函數,無法使用。
(3)c語言函數類型擴展閱讀:
C語言編寫注意事項:
1、const在聲明變數中起限製作用, 該限定變數的值不能被修改。
2、%運算符不能應用與float或double類型。
3、char類型轉換為int型時, 無法判斷它是signed還是unsigned.這樣其結果有可能為負數, 因此轉換時盡量指定signed和unsigned限制符。
4、++i與i++不同之處: ++i是先+1在使用, i++是先使用i在遞加1。
5、三元運算符"?:" 第一個表達式的括弧不是必須的,但是由於三元表達式的優先順序非常低,我們還是將第一個表達式用()括起便於閱讀和理解。
6、C語言中可以使用遞歸 (即函數調用自身函數), 其不節省儲存器開銷也不加快執行速度, 只是使程序緊湊便於理解。
④ c語言中函數可以看作一個數據類型
函數可以看成一個數據類型,比如說:void main()表明該函數是void型,即運行完main函數後沒有數據返回,int main()則是int型,運行完該函數就要返回一個int型的數據,即在main函數體裡面要有return語句,否則編譯就會出錯。
同時函數名本身也是一個數據類型, 代表該函數的函數指針.
⑤ C語言 四種基本數據類型
1、基本類型
short、int、long、char、float、double 這六個關鍵字代表C 語言里的六種基本數據類型。
2、派生數據類型
派生數據類型是具有相同數據類型,並且按照一定順序排列的一組變數的集合。
3、指針類型
指針是一個特殊的變數,它裡面存儲的數值被解釋成為內存里的一個地址。
4、空類型
空類型表示一種未知的類型,不能表示一個真實的變數。
(5)c語言函數類型擴展閱讀:
C語言中整型數據的取值范圍:
1、短整型:類型說明符為short int或short'C110F1。所佔位元組和取值范圍會因不同的編譯系統而有差異。對於16字機,short int 佔2個位元組,在大多數的32位機中,short int 佔4個位元組。
2、長整型:類型說明符為long int或long ,在內存中佔4個位元組,其取值為長整常數。在任何的編譯系統中,長整型都是佔4個位元組。在一般情況下,其所佔的位元組數和取值范圍與基本型相同。
3、無符號型:類型說明符為unsigned。在編譯系統中,系統會區分有符號數和無符號數,區分的根據是如何解釋位元組中的最高位,如果最高位被解釋為數據位,則整型數據則表示為無符號數。
⑥ C語言函數的分類函數
所在函數庫為【ctype.h】
int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否則返回0
int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或數字('0'-'9')
返回非0值,否則返回0
int isascii(int ch) 若ch是字元(ASCII碼中的0-127)返回非0值,否則返回0
int iscntrl(int ch) 若ch是作廢字元(0x7F)或普通控制字元(0x00-0x1F)
返回非0值,否則返回0
int isdigit(int ch) 若ch是數字('0'-'9')返回非0值,否則返回0
int isgraph(int ch) 若ch是可列印字元(不含空格)(0x21-0x7E)返回非0值,否則返回0
int islower(int ch) 若ch是小寫字母('a'-'z')返回非0值,否則返回0
int isprint(int ch) 若ch是可列印字元(含空格)(0x20-0x7E)返回非0值,否則返回0
int ispunct(int ch) 若ch是標點字元(0x00-0x1F)返回非0值,否則返回0
int isspace(int ch) 若ch是空格(' '),水平製表符(' '),回車符('
'),
走紙換行('f'),垂直製表符('v'),換行符('
')
返回非0值,否則返回0
int isupper(int ch) 若ch是大寫字母('A'-'Z')返回非0值,否則返回0
int isxdigit(int ch) 若ch是16進制數('0'-'9','A'-'F','a'-'f')返回非0值,
否則返回0
int tolower(int ch) 若ch是大寫字母('A'-'Z')返回相應的小寫字母('a'-'z')
int toupper(int ch) 若ch是小寫字母('a'-'z')返回相應的大寫字母('A'-'Z')
⑦ C語言的數據類型分為幾種
short、int、long、char、float、double
這六個關鍵字代表C 語言里的六種基本數據類型。
在不同的系統上,這些類型占據的位元組長度是不同的:
在32
位的系統上
short
占據的內存大小是2 個byte;
int占據的內存大小是4
個byte;
long占據的內存大小是4
個byte;
float占據的內存大小是4
個byte;
double占據的內存大小是8
個byte;
char占據的內存大小是1
個byte。
具體可以用sizeof測試一下即可。
(7)c語言函數類型擴展閱讀:
C語言是一門通用計算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
⑧ 在c語言中用什麼函數判定一個變數的類型
在c語言中用沒有函數判定一個變數的類型,可以使用sizeof來判斷變數大小。
示例:
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char **argv) //主程序
{
//對C語言內置類型的所佔位元組數的測試
printf("size of char is: %d ",sizeof(char)); //字元型數據所佔位元組數 、
printf("size of short is: %d ",sizeof(short)); //短整形數據所佔位元組數
printf("size of int is: %d ",sizeof(int )); //整形數據
printf("size of short int is: %d ",sizeof(short int)); //短整形
printf("size of long int is: %d ",sizeof(long int)); //長整形數據
printf("size of float is: %d ",sizeof(float)); //浮點型數據
printf("size of double is: %d ",sizeof(double)); //雙精度數據
//對字元及字元串數組所佔位元組數的測量
char a[] ={'a','b','c','d','e'};
printf("size of a[] is: %d ",sizeof(a)); //輸出數組a[]所佔位元組數
char b[]={"abcde"}; //初始化字元串b
printf("size of b[] is: %d ",sizeof(b)); //數組b[]
char c[][3]={{'a','b','c'},{'d','e','f'},{'g','h','i'},{'j','k','l'}}; //初始化二維字元型數組
printf("size of c[][] is: %d ",sizeof(c)); //二維數組c所佔位元組數
printf("size of c[0] is: %d ",sizeof(c[0])); //二維數組中的某行所佔的位元組數,例如第0行
printf("size of c[0][0] is: %d ",sizeof(c[0][0])); //某行某個元素,例如第0行第0個元素
//對指針所佔位元組數的測量
char *p=0;
printf("size of *p is: %d ",sizeof(p)); //字元型指針
system("pause");
return 0;
}
(8)c語言函數類型擴展閱讀
使用sizeof()計算數組長度
將sizeof用於 expr是並沒有計算expr的值。特別是在sizeof *p中,指針p可以是一個無效地址,因為不需要對p做解引用操作。
對char類型或值為char類型的表達式做sizeof操作結果為1。對引用類型做sizeof操作,將返回存放此引用類型對象所需的內存空間大小。
對指針做sizeof操作,將返回存放指針所需的內存大小,注意,如果要獲取該指針指向對象的大小,則必須對該指針進行解引用。對數組做sizeof操作等效於對其元素做sizeof操作的結果乘上數組元素的個數。
因為sizeof返回整個數組在內存中的存儲長度,所以用sizeof數組的結果初一sizeof其元素類型的結果,即可求出數組元素的個數:int sz = sizeof(ia)/sizeof(*ia);
通常將8位的塊作為一個位元組,32位或4個位元組作為一個 「字」。一般的short為半個機器字長,int為一個機器字長。
⑨ C語言函數類型都有那些什麼叫返回值有什麼用
以樓主的例子 void delay(unsigned char b)其中void 是表示該函數的返回值是無值型的(即無任何的返回值)而形參的 unsigned char表示參數的類型是無符號字元型,若是viod型函數就是在不需要函數返回值時才用的比如你要寫個函數來運算a=b+c,直接改變a的值就這樣實現:void add(){a=b+c;}調用時這樣用:add();在此之前先定義a,b,c就好了如int a=1;int b=2;int c=3;int main(){add();printf("a=%d/nb=%d/nc=%d/n",a,b,c);}如果運行正常的話,a=6,b=2,c=3要是改成add(int a,int b,int c)函數,int a=1;int b=2;int c=3;int main(int){add(a,b,c);printf("a=%d/nb=%d/nc=%d/n",a,b,c);}無所謂用哪種啦
⑩ c語言函數從形式上分為哪兩種
一種是用戶自定義函數,就是自己根據功能的需要自己編寫的函數;另一種是系統自帶的函數,如sqrt(x)函數 (就是求x的二次方根),這樣的可以直接用,前提是得在頭文件中把它們包含進去。
在編程領域中,C語言的運用非常之多,它兼顧了高級語言的匯編語言的優點,相較於其它編程語言具有較大優勢。計算機系統設計以及應用程序編寫是C語言應用的兩大領域。同時,C語言的普適較強,在許多計算機操作系統中都能夠得到適用,且效率顯著。
(10)c語言函數類型擴展閱讀:
C語言包含有各種控制語句僅有9種,關鍵字也只有32 個,程序的編寫要求不嚴格且多以小寫字母為主,對許多不必要的部分進行了精簡。
實際上,語句構成與硬體有關聯的較少,且C語言本身不提供與硬體相關的輸入輸出、文件管理等功能,如需此類功能,需要通過配合編譯系統所支持的各類庫進行編程,故c語言擁有非常簡潔的編譯系統。
如果一個變數名後面跟著一個有數字的中括弧,這個聲明就是數組聲明。字元串也是一種數組。它們以ASCII的NULL作為數組的結束。要特別注意的是,方括內的索引值是從0算起的。