1 函式
1.1函式的介紹
1.1.1 函式的概述
函式是c語言的功能單位,實作一個功能可以封裝一個函式來實作,
定義函式的時候一切以功能為目的,根據功能去定函式的引數和回傳值需要傳哪些資料給函式?(實參)、函式的功能代碼(函式體)如何實作?函式需要回傳什么型別的資料?考慮(傳入引數、函式體、回傳值型別)
1.1.2 函式的分類 (定義角度)
庫函式((c++語言庫)、自定義函式、系統呼叫(內核提供給用戶的函式介面)
1.1.3 函式的分類 (有無引數)
無參的函式:不能將函式外部的資料傳遞給函式內部
有參的函式:通過引數將函式外部的資料傳遞到函式內部
(引數:函式外部資料到函式內部的橋梁)
1.2 函式的定義、宣告、呼叫
1.2.1 函式的定義
實作函式體,確定函式名,函式的形參、函式的回傳值型別
1.2.2 函式宣告
函式宣告:告知編譯器 該函式的函式名是啥 有幾個形參 回傳值型別是啥

1.2.3 函式的呼叫
執行函式體,一般呼叫格式:函式名(實參);

1.4 函式的傳參
1.4.1 普通變數作為函式的引數
函式內部 需要使用外部變數的值 需要將外部變數的值傳遞給函式內部,這時普通變數就要作為函式的形參(單向傳遞之值傳遞)
1.4.2 陣列作為函式的引數
1 數值陣列作為函式的引數 函式內部可以(讀寫)外部資料的元素,
using namespace std;
void inputIntArray(int arr[],int n); void sortIntArray(int arr[],int n); void printIntArray( int arr[],int n); void main() { int arr[5] = {0}; int n = sizeof(arr)/sizeof(arr[0]); //獲取鍵盤輸入 inputIntArray(arr,n); //對陣列排序 sortIntArray(arr,n); //對陣列遍歷 printIntArray(arr,n); } void printIntArray(int arr[], int n) { int i=0; for(i=0;i<n;i++) { cout<<arr[i]<<" "; } cout<<endl; } void inputIntArray(int arr[], int n) { cout<<"請輸入"<<n<<"個int型資料:"; int i = 0; for(i=0;i<n;i++) { cin>>arr[i]; } return; } void sortIntArray(int arr[],int n) { int i =0; for(i=0;i<n-1;i++) { int j=0; for(j=0;j<n-i-1;j++) { if(arr[j]>arr[j+1]) { int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } } }
2 字符陣列作為函式的引數
int myStrlen(char str[]); void myGetString(char str[],int n); void main() { char str[128] = "0"; //鍵盤獲取字串 myGetString(str,sizeof(str)); //獲取字串的長度 cout<<"長度:"<<myStrlen(str)<<endl; } int myStrlen(char str[]) { int i=0; while(str[i] !='\0') i++; return i; } void myGetString(char str[],int n) { cout<<"請輸入一個字串:"; cin.getline(str,n); }
2 預處理
2.1 記憶體磁區
行程:可執行檔案從運行到結束整個動態的程序就叫行程,(占記憶體空間)
在32位平臺每一個行程占4G空間(虛擬空間)

2.2變數的存盤
2.2.1 普通區域變數
定義形式:{}里面定義的普通變數叫普通區域變數

存盤區域:堆疊區
1、普通區域變數不初始化內容不確定
2、普通區域變數同名就近原則(盡量別同名)
2.2.2 普通全域變數
定義形式:在函式外定義的普通變數

作用范圍:當前源檔案以及其他源檔案都有效,
生命周期:整個行程,
存盤區域:全域區
1、全域變數不初始化內容為0
2、全域變數和區域變數同名優先選擇區域變數,
3、其他源檔案使用全域變數必須對全域變數進行extern宣告,
2.2.3 靜態區域變數
定義形式:在{}加static定義的區域變數就叫靜態區域變數

作用范圍:所在的復合陳述句之間有效
生命周期:整個行程有效
存盤區域:全域區(全域區存盤特點:整個行程有效,內容不初始化為0)
靜態區域變數整個行程都存在(第一次定義有效)

2.2.4 靜態全域變數
定義形式:在函式外加static修飾定義的變數就是靜態全域變數
2.3 全域函式和靜態函式

作用范圍:只能在當前源檔案使用
存盤區域:全域區
2.3.1 全域函式(函式默認都為全域函式)
全域函式:在當前源檔案以及其他源檔案都可以使用,
如果其他源檔案使用需要extern對全域函式進行宣告
2.3.2 靜態函式(加static修飾的函式)

2.4 頭檔案包含
頭檔案包含:在預處理結果將頭檔案的內容原封不動的包含在目的檔案中
#include <head.h> 建議<>包含系統頭檔案
<> 從系統指定目錄尋找head.h頭檔案
#include "head.h" 建議""包含自定義頭檔案
""先從當前目錄尋找head.h頭檔案 如果找不到 再到系統指定的目錄下尋找
2.5 #define 宏
編譯四階段:預處理、編譯、匯編、鏈接
使用關鍵字 define定義 叫宏 宏盡量大寫和普通變數區分開
#define PI 3.14 (宏定義)
在預處理結果 使用3.14替換所有出現PI的位置(宏展開)
2.5.1 不帶引數的宏

宏的作用范圍:是從定義處開始 到當前檔案結束都有效
#undef可以結束宏的作用域
宏 沒有作用域的限制,只在當前源檔案 有效
2.5.2 帶引數的宏(宏函式)

1、宏的引數不能有型別

2、 宏不能保證引數的完整性

可以使用()的形式 讓帶引數的宏 具備一定的完整性

3、 宏不能作為結構體、類的成員
4、案例:從外部展開

2.5.3 宏函式和普通函式的區別:
帶參宏被呼叫多少次就會展開多少次,執行代碼的時候沒有函式呼叫的程序,不需要壓堆疊彈堆疊,所以帶參宏,是浪費了空間,因為被展開多次,節省時間;
帶參函式,代碼只有一份,存在代碼段,呼叫的時候去代碼段取指令,呼叫的時候要,壓堆疊彈堆疊,有個呼叫的程序,帶參函式是浪費了時間,節省了空間;
帶參函式的形參是有型別的,帶參宏的形參沒有型別名,
函式有作用域的限制,可以作為類的成員;宏函式沒有作用域的限制,不能作為類的成員
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/546309.html
標籤:其他
上一篇:Python基礎_概述
下一篇:python正則運算式


