1.auto自動變數,函式凡是未知儲存型別說明的變數均為自動變數。也就是說,區域性變數在預設情況下是自動變數。呼叫時就存在,退出時就消失。
2.register暫存器變數,當乙個變數頻繁永定時,必須要反覆訪問記憶體,從而耗費大量的訪問時間,為此,定義暫存器變數存放在cpu的暫存器中。對於迴圈次數較多的迴圈控制變數及迴圈體內反覆使用的變數可定義為暫存器變數。
3.extern外部變數,當乙個程式被分成兩個或多個檔案,分別編譯它們,然後將它們連線起來,必然產生一些問題,如檔案之間如何共享全域性變數。乙個全域性變數只能說明一次,而在多個檔案的程式中,會有兩個或多個檔案都需要訪問這個全域性變數。因此,必須提供一種方法通知編譯器,該變數是程式的全域性變數。extern儲存型別正好解決此問題。它的生存期是整個程式執行的結束,作用域較大以至於安全性較差。
4.static靜態變數,無論是呼叫還是退出程式函式都存在。系統自動為其賦初始值為0,自動變數則不定。函式被告知呼叫時,其中的靜態區域性比昂兩的值將保留前次呼叫的結果。
如:#include
void format();
int main()
return 0;
}void format()
else
以上,靜態變數m祈禱了記錄函式被訪問次數的功能,這種功能通過自動變數無法完成。若將m前的static去掉,則無論呼叫多少次都不會換行,由於m是自動變數,每次函式呼叫建立新m並初始化為0,所以無論呼叫format()函式多少次,m也不可能達到10.
5.傳值呼叫,呼叫函式的實參用表示式值,被呼叫函式的形參用變數名。在呼叫時,系統將實參拷貝乙個副本給形參,使形參與實參具有相同的值,形參變動時實際是變數實參傳遞給它的副本,二實參根本沒改變過。引數個一樣,並且實參型別與形參型別相同。
如:#include
void increment(int ,int );
void main()
void increment(int value1,int value2)
輸出結果:
請輸入兩個數:25 48
遞增前的值是:25和48
子函式中值是:26和49
遞增後的值是:25和48
6.引用呼叫,呼叫函式的實參使用位址值,被呼叫函式的形參要求是指標,引數個數一樣,且實參型別與形參型別相同。將實參傳給形參時,是把實參的位址給形參,讓形參直接指向實參。傳址方式在時間和空間的開銷上都將減少,因此可以提高執行效率。
如,#include
void increment(int *,int *);
void main()
void increment(int *ptr1,int *ptr2)
輸出結果:
請輸入兩個數:25 48
遞增前的值是:25和48
子函式中值是:26和49
遞增後的值是:26和49
7.陣列作為引數來傳遞資訊。
#include
#define n 5
void sort(float a);
void main()}}
}8.通過函式實現求5個數中的最大值。
#include
int find_larg(int *);
void main()
larg_num=find_larg(array);
printf("/n 最大的數是:%d/n",larg_num);
}int find_larg(int *ptr)
ptr++;
}return larg;
}
C語言練習 2
1.給定兩個整形變數的值,將兩個值的內容進行交換。include include int main 引入第三個臨時變數實現兩個變數的交換。2.不允許建立臨時變數,交換兩個數的內容 include include int main 可能出現的問題 num1或num2很大,num1 num2的結果溢位,...
C語言 練習2
給定兩個整形變數的值,將兩個值的內容進行交換。include include intmain int arr2 int len sizeof arr1 sizeof arr1 0 int i 0 for i 0 i len i for i 0 i len i printf n for i 0 i l...
C語言 指標練習 2
int main 輸出結果 ff ff ff fc 4 分析 int main int ptr1 int aa 1 int ptr2 int aa 1 printf d d ptr1 1 ptr2 1 return 0 輸出結果 10 5 分析 aa,取的是二維陣列的位址,加1,跳過整個陣列,指向了...