全局變量 global variable
ios
|--文件做用域 file scope數組
局部變量 local variable函數
|--函數做用域 function scopespa
|--塊做用域 block scopeprototype
|--函數原型做用域 function prototype scope指針
存儲期 storage duration調試
|--靜態存儲期 static storage duration 對變量分配固定的存儲空間orm
|--動態存儲期 dynamic storage duration 對變量動態的分配存儲空間內存
內存分配劃分: 作用域
|--程序區 存放代碼
|--靜態存儲區 存放全局變量、靜態變量 程序開始分配,程序結束釋放
|--動態存儲區 棧 存放局部變量 函數開始分配,函數結束釋放
堆 存放new出來的東西
存儲類別 storage class
|--自動 auto
|--寄存器 register
|--靜態 static
|--外部 extern
自動變量 auto variable
auto int b,c=3; 等價於 int b,c=3;
寄存器變量
register int i,f=1; //建議性,非強制性 瞭解便可
static
|--靜態局部變量 static local variable
函數內可見,函數外隱藏,存放在靜態存儲區
在函數編譯時已經賦初值
|--靜態外部變量
某些全局變量僅限於本文件使用
extern 僅用於聲明
|--在一個文件內聲明全局變量
void main()
{
extern int a,b; //提早引用聲明
}
int a=15, b=-7; //a b 爲全局變量
//此方法等同於把全局變量放在全部引用它的函數以前(推薦)
|--在多文件程序中聲明外部變量
file1 file2.cpp
extern int a,b; int a=3, b=4;
讓file1能夠訪問file2的變量
定義:須要創建存儲空間 int a;
聲明:不需創建存儲空間 extern int a;
內部函數:
只能在本文件使用的函數
staitc 類型標識符 函數名(形參列表)
外部函數:
本文件定義函數時,在函數首部加extern(可省,默認添加)
extern int fun (int a, int b){}
其餘文件調用函數時要先聲明(可省,默認添加)
extern int fun (int a, int b);
函數聲明的做用:通知編譯系統,該函數在本文件中稍後定義,或在另外一文件中定義。
用函數原型可以把函數的做用域擴展到定義該函數的文件以外(extern可省)
只要在使用該函數的每個文件中包含該函數的函數原型便可
最多見的例子:#include 命令
頭文件裏面包含函數原型
函數定義放在函數庫中或單獨編譯成目標文件,在鏈接階段與用戶文件鏈接組成可執行文件
預處理——編譯——鏈接
預處理功能:
|--宏定義
|--文件包含
|--條件編譯
以#頂格開頭,末尾不含;
宏定義:
#define 標識符 字符串 // 已被const語句替換
#defing PI 3.1415926
#define 宏名(參數表) 字符串
#define S(a,b) a*b
S(3,2) 替換爲 3*2
文件包含:
一個源文件將另外一個源文件的內容複製過來
#include <文件名> 庫函數
#include "文件名" 用戶自定義頭文件,建議用.h結尾
#include <iostream> 到系統目錄中找,若是沒有則出錯
#include "C:\\tan\C++\file.c" 到指定目錄尋找,再到系統目錄找
#include "file2.c" 到當前目錄找,再到系統目錄找
條件編譯
#ifdef 標識符 #ifndef 標識符 #if 表達式
程序段1 程序段1 程序段1
#else #else #else
程序段2 程序段2 程序段2
#endif #endif #endif
調試時的應用:
#include <iostream>
using namespace std;
#define RUN
int main()
{
int x=1, y=2, z=3;
#ifdef RUN
cout << "x=" << x << "y=" << y << "z=" << z << endl;
#endif
cout << "x+y+z=" << x*y*z << endl;
}
內置函數/內嵌函數/內聯函數 inline function
在編譯時將所調用函數的代碼直接嵌入到主調函數中
適用於規模小又被頻繁調用的函數,內置函數中不包括循環和switch語句
inline int max(int, int, int) //函數聲明
inline int max(int a, int b, int c){} //函數實現 二者之一有inline便可
函數重載 function overloading
不能出現:參數類型和個數相同,返回值不一樣的狀況
函數模板 function template
創建一個通用函數,其函數類型和形參類型不具體指定,用一個虛擬類型來表示
這個通用函數就稱爲模板
適用狀況:函數體相同,函數參數個數相同而類型不一樣
template<typename T>
T max(T a, T b, T c)
{
if (b>a) a=b;
if (c>a) a=c;
return a;
}
template<typename T>
通用函數定義
template<class T> //能夠定義多個虛擬類型
通用函數定義
變量的地址稱爲該變量的指針
& 取地址運算符
* 間接訪問運算符(指針運算符)
int * p; 指向整型數據的指針變量
int * p[n]; 指針數組
int (*p)[n]; 指向數組的指針變量
int * p( ); 返回值爲指針
int (*p)( ); 函數指針 p=fun; (*p)();//調用
int **p; 指向指針的指針變量
引用
int a;
int &b = a; //b是a的別名,屬於地址傳遞。 必須在聲明時賦值
姓童 名林 字表海川 童海川是童林的引用