函數基礎學習
基本介紹
#include<stdio.h>
/*對于處理冗雜且重複的代碼,可以通過函數的方式同時函數也可以解決主函數過于龐大和函數的問題
主流的編寫思想還是面向方法
封裝的功能
要注意C語言程式的開始都是從主函數開始的
*/
void print_Star();// 函數的聲明語句 ,如果函數的定義寫在main函數後面時,一定要寫函數的聲明語句,否則編譯器會報錯
/*下面是函數的定義,void意思為傳回值的類型為空類型,即這一個位置寫的是函數的傳回值類型
print_Star 是函數的名稱
()是C語言差別變量和函數的方式,裡面可以放入形式參數(函數的定義的時候)
{}花括号裡面則是函數體
return 是一個傳回語句,可以實作資料傳回主函數的操作,return意味着這個函數體的結束,如果沒有return則運作到{}結束
如果有多個return,那大機率是判斷語句,判斷結果不同對應不同的傳回值
*/
void print_Star(){
printf("*****************\n");
printf("********這是一個分割線************\n");
}
example(){ //當不寫前面傳回值的時候預設為int
printf("****************\n");
return 50;
}
int main()
{
int a;
print_Star();// 調用函數的方法
a=example();
printf("%d",a);
return 0;
}
自定義函數的使用:傳回值和參數輸入
#include<stdio.h>
int getsum(int n);//由于自定義函數在主函數之後,是以一定要寫聲明語句
int max(int a,int b);
int main()
{
int a,b,c;
printf("請輸入n的數值:");
scanf("%d",&a);
printf("運算的結果為%d\n",getsum(a)); // 這裡的a是實際參數,是真正要被輸入到自定義的getsum函數當中的
scanf("%d%d",&b,&c);
printf("最大值為%d\n",max(b,c));
return 0;
}
int getsum(int n){ // 這裡int n 是形式參數,即變量是由外部的值賦予的,這裡面隻是一個形式,相當于占位符
int result=0;
int i;
for(i=1;i<=n;i++){
result+=i;
}
return result; //傳回值語句,将運算後的值傳回
}
int max(int a,int b){
return a>b?a:b;
/*或者這樣子寫
if (a>b) return a;
if (a<=b) return b;
要注意這裡面隻會執行一個return
*/
}
易錯的一個交換函數
#include<stdio.h>
/*函數的書寫時要注意一個函數最好實作一個功能*/
void swap(int *x,int *y);
void swap(int *x,int *y)
{
int t;
t=*x;
*x=*y;
*y=t;
}
//void swap1(int *x,int *y)
//{
// int *t;
// *t=*x;
// *x=*y;
// *y=*t;
// } 這樣子書寫的就是錯的
int main()
{
int a=3,b=4;
printf("交換前%d,%d",a,b);
swap(&a,&b);
printf("交換後%d,%d",a,b);
return 0;
}
形式參數與實際參數的差別
#include<stdio.h>
void get_array(int b[10]);
void get_array(int b[10]){
printf("size in function:%d\n",sizeof(b));//這裡是形式參數,是一個位址,隻占一個位址的尺寸。32位4,64位8
}
int main()
{
int *p=NULL;
int a[10]={1,2,3,4,5,6,7,8,9,0};
printf("size in main funtion:%d\n",sizeof(a));//這裡輸出的數組的大小
get_array(a);
printf("%d",sizeof(p));
return 0;
}
不确定的參數函數的使用及正規表達式使用
#include<stdio.h>
#include<stdarg.h>
int sum(int n,...);
int sum(int n,...){
int i,sum=0;
va_list vap; // 參數清單的定義
va_start(vap,n);//從清單的n即第一個參數開始
for(i=0;i<n;i++){
sum += va_arg(vap,int);//在清單中周遊int類型的參數
}
va_end(vap);//關閉參數清單
return sum;
}
int main()
{
char str[50];
int result;
result=sum(4,2,3,4,5);
printf("%d\n",result);
result=sum(10,2,3,4,5,9,1,0,15,454,85);
printf("%d\n",result);
result=sum(7,2,3,4,5,154,154,454);
printf("%d\n",result);
result=sum(5,2,3,4,5,452);
printf("%d\n",result);
printf("**************這是一條分割線*******************\n");
/*正規表達式的應用*/
sscanf("123456789abcABC","%[^a-z]",str);//去除小寫的字母
printf("%s\n",str);
scanf("%[^A-Z]",str); // 讀到大寫的字母(不包含大寫字母)為止
printf("%s\n",str);
return 0;
}
stdarg的使用方式
C語言可變參數與字元串處理函數的靈活使用