
文章目錄
- 函式
- 傳值呼叫與參考呼叫
- 作用域
- 陣列
- 多維陣列
- 陣列作為函式引數
- 定制輸入輸出函式
函式
函式是一組一起執行一個任務的陳述句,每個 C 程式都至少有一個函式,即主函式 main() ,所有簡單的程式都可以定義其他額外的函式,
return_type function_name( parameter list )
{
body of the function
}
在C語言中,一個函式的組成部分有如下:
回傳型別:return_type 是函式回傳的值的資料型別,有些函式執行所需的操作而不回傳值,在這種情況下,return_type 可以是關鍵字 void,
函式名稱:這是函式的實際名稱(function_name),函式名和引數串列一起構成了函式簽名,
引數:當函式被呼叫時,有時候需要向引數傳遞一個值,這個值被稱為實際引數,引數串列包括函式引數的型別、順序、數量,引數是可選的,也就是說,函式可能不包含引數,
引數中也存在默認引數,默認引數即在函式簽名中賦予了某個引數默認值,如果在呼叫函式的時候不指定該引數值,則該引數取值為默認,
默認引數置于引數串列的最右端、
在給默認引數賦值的時候,最好指定引數名對應資料,
函式主體:函式主體包含一組定義函式執行任務的陳述句,
實作一個比大小的函式:
/* 函式回傳兩個數中較大的那個數 */
int max(int num1, int num2)
{
/* 區域變數宣告 */
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
呼叫這個函式:
int main ()
{
/* 區域變數定義 */
int a = 100;
int b = 200;
int ret;
/* 呼叫函式來獲取最大值 */
ret = max(a, b);
printf( "Max value is : %d\n", ret );
return 0;
}
傳值呼叫與參考呼叫
| 呼叫型別 | 描述 |
|---|---|
| 傳值呼叫 | 該方法把引數的實際值復制給函式的形式引數,在這種情況下,修改函式內的形式引數不會影響實際引數, |
| 參考呼叫 | 通過指標傳遞方式,形參為指向實參地址的指標,當對形參的指向操作時,就相當于對實參本身進行的操作, |
上面那就是傳值呼叫,至于參考呼叫,等我講指標了再說吧,現在講也捋不清楚啊,
作用域
這個其實應該再編碼規范的時候寫的,但是那會兒給忘了,現在補上,
全域變數:在所有函式外部的全域變數,通常是在程式的頂部,全域變數在整個程式生命周期內都是有效的,記住這點,我們以后會為這點做出重大舉措的!!!
區域變數:在函式或塊內部的區域變數(這里的塊指的是:函式、結構體、分支、回圈、例外等),區域變數在函式外部是不可知的,
陣列

在 C 中要宣告一個陣列,需要指定元素的型別和元素的數量:
type arrayName [ arraySize ]; //這里的大小也可以不設定,能設定就設定
示例:
double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};
訪問陣列元素:下標訪問法
#include <stdio.h>
int main ()
{
int n[ 10 ]; /* n 是一個包含 10 個整數的陣列 */
int i,j;
/* 初始化陣列元素 */
for ( i = 0; i < 10; i++ )
{
n[ i ] = i + 100; /* 設定元素 i 為 i + 100 */
}
/* 輸出陣列中每個元素的值 */
for (j = 0; j < 10; j++ )
{
printf("Element[%d] = %d\n", j, n[j] );
}
return 0;
}
多維陣列
一般就開到兩維,再高也少見,
type name[size1][size2]...[sizeN];
int threedim[5][4]; //第一個大小不能放空
初始化示例:
int a[3][4] = {
{0, 1, 2, 3} ,
{4, 5, 6, 7} ,
{8, 9, 10, 11}
};
也可以這樣:
int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
訪問二維陣列依舊可以用下標取值法,
陣列作為函式引數
void myFunction(int *param) //不懂指標先不急
{
···
}
void myFunction(int param[10])
{
···
}
void myFunction(int param[])
{
···
}
那具體使用該當如何呢?
#include <stdio.h>
double getAverage(int arr[], int size)
{
int i;
double avg;
double sum=0;
for (i = 0; i < size; ++i)
{
sum += arr[i];
}
avg = sum / size;
return avg;
}
int main ()
{
/* 帶有 5 個元素的整型陣列 */
int balance[5] = {1000, 2, 3, 17, 50};
double avg;
/* 傳遞一個指向陣列的指標作為引數 */
avg = getAverage( balance, 5 ) ;
/* 輸出回傳值 */
printf( "平均值是: %f ", avg );
return 0;
}
由于還沒有涉及到指標,有些操作也不太方便現在寫,
定制輸入輸出函式
我初學C語言的時候寫的代碼,獻丑了,
那時候還不知道寫檔案的重要性,現在這個函式怎么用我還得看看
這個函式有什么用呢?為什么我要特地的放在這里?
函式功能:
實作一個用于控制輸入輸出的函式,可控范圍包括:
注入長度、接收輸入型別、是否明文輸出等
支持回刪,回車結束,esc退出
在我們后面用C語言寫專案的時候會經常用到這個函式,而不是取用默認的scanf,scanf時不時的還會暴雷!!!
所以希望各位小伙伴看完之后可以自行實作一遍,加深印象,
/輸入函式///
void getstr(char str[],int maxLen,int type,int isplainText)
/*
這是一個用于控制輸入輸出的函式,可控范圍包括:
注入長度、接收輸入型別、是否明文輸出
支持回刪,回車結束,esc退出
引數釋義:
str[]:用于接收輸入
maxLen:最大輸入長度+1
type:接收輸入型別:0(無所謂)、1(僅數字)、2(僅英文)
isplainText:是否明文輸出:0是1否
*/
{
char ch;
int iLen = 0;
while(1)
{
ch = getch();
if(ch == '\b')
{
if(iLen>0)
{
printf("\b \b");
iLen--;
}
}
if(ch == '\r')
{
str[iLen] = '\0';
break;
}
if (ch == 27)
{
system("cls");
printf("退出成功\n");
exit(1);
}
if(iLen<maxLen-1)
{
switch(type)
{
case 0:
{
if(ch !='\b')
{
if(isplainText == 0)
{
putchar(ch);
}
else
{
putchar('*');
}
str[iLen] = ch;
iLen++;
}
}
break;
case 1:
{
if(ch >= '0' && ch <= '9')
{
if(isplainText == 0)
{
putchar(ch);
}
else
{
putchar('*');
}
str[iLen] = ch;
iLen++;
}
}
break;
case 2:
{
if(ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z')
{
if(isplainText == 0)
{
putchar(ch);
}
else
{
putchar('*');
}
str[iLen] = ch;
iLen++;
}
}
break;
}
}
}
}
其實不難看懂,諸位就看檔案吧,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/280940.html
標籤:其他
