關鍵字
1.extern:宣告外部變數,變數在其他檔案中定義,當然這個變數一定要是全域性變數
test.c
#include int i = 1;
int main()
print.c
#include extern int i;
void print()
2.static
用static修飾全域性變數時,限定了作用域,無法通過extern進行外部呼叫;
用static修飾區域性變數時,改變了其生命週期,由原來的函式內,改變為整個程式。
tips:我們所提及的記憶體其實是虛擬記憶體,當執行程式時,作業系統會為其分配4個g的虛擬記憶體空間。如下圖所示:
對於非靜態的區域性變數,生命週期為該變數所在函式內,但對於靜態的區域性變數,其生命週期為整個程式結束。因為,非靜態的區域性變數存放在棧中,棧又是由系統管理,而靜態的區域性變數存放在bss段。
堆與棧的區別:
堆是由使用者管理;棧由系統管理。
3.auto:最常用也最不常見
顯式定義: auto int x, y;
隱式定義:int x, y;
4.register:對於使用頻繁的變數,可以使用register宣告為暫存器變數,其值存放在cpu中,加快了執行速度。
例如:register int x;
regster char ch;
注意:對於register關鍵字,不能使用&,因為存放在cpu中,與存放記憶體當中不同。
預處理指在進行第一遍掃瞄(詞法掃瞄和語法分析)之前所做的工作。
命令的種類:
#define
#include
#if 0 ....#endif
巨集: #define pi 3.1415926
#define out printf("hello world")
巨集函式的安全性較差,但節約記憶體,僅僅是一種替換;
#define sqr(x) x*x
a = sqr(3);
printf("%d\n", a);
結果是:a = 3 * 3
= 9#define sqr( x ) x*x
a = sqr(2 + 1);
printf("%d\n",a);
結果是:5
原因:巨集僅僅是替換,對於此題sqr(2 + 1),我們要展開來開,2 + 1 * 2 + 1,因此此題是5,但將巨集稍作修改
#define sqr(x) (x)*(x)
那麼輸出的結果就是9了
指標1.指標是什麼?
指標是變數的一種,佔4個位元組,裡面是乙個位址,通過這個位址可以找到要找到的內容。
例如 : int *p = &a;
實質:單元的位址就是指標的內容。
2.指標的運算
* : 定義時 ,指明為指標型別
使用時,取值
& : 取位址
例如:int *p, a;
p = &a;
*p = 3;
3.指標作函式引數
函式的引數不僅僅可以是整型、實型、字元型等,還可以是指標型別。
作用是:將變數的位址傳送到乙個函式中;
指標和變數
例如:
int x, *p, y;
x = 5;
p = &x;
y = *p + 3; // 5 + 3 = 8
y = ++*p; // *p自加1 ,y = 4
y = *p++; //y = 4, p的位址加1
思考:(*p)++ 與 *p++ 的區別?
(*p)++:對p指向的內容進行+1運算;
*p ++:先取p指向的內容,再p++,對位址進行+1操作;
注意:指標變數未賦值時,可以是任意值,是不能使用的,會造成意外錯誤,而指標變數被賦值為null值後,是可以使用的,只是不指向具體的內容。
指標和陣列
1.陣列元素的指標
陣列的指標是指向陣列的起始位址,陣列元素的指標是指向陣列元素的位址;
例如:int a[10];
int *p;
p = &a[0]; //p是指向a[0]這個元素的位址
2.用指標引用陣列元素
如果指標變數p已經指向陣列中的乙個元素,則p+1指向同一陣列的下一元素;
例如: p = &a[0];
那麼(p + i)和(a + i)都是a[i]的位址
*(p+i)和*(a+i)都是p+i和a+i所指向的陣列元素,即a[i]。指向陣列的指向變數也可以帶下標,p[i]和*(p+i)是等價的。
3.引用乙個陣列
下標法:用a[i]來表示;
指標法:用*(a+i),*(p+i)來表示;
學習this關鍵字
在學習msdn的過程中加入一點自己的理解 先學習類例項使用this 以下是 this 的常用用途 printing method public void printemployee nalias name alias passing the object to the calctax method ...
關鍵字CONST用於指標
通過將變數宣告為const的,可確保變數的取值在整個生命週期內都固定為初始值。這種變數的值不能修改,因此不能將其用作左值。因為指標也是變數,因此也可以將關鍵字const 用於指標。但是指標是特殊的變數,包含的是記憶體位址,可用於修改記憶體中的資料塊。如 const int dir 這種可修改指標的指...
const關鍵字與指標
1 const修飾指標的四種形式 a.const是關鍵字,在c語言中原來修飾變數,表示這個變數是常量。const int inum 10 和 int const inum 10 的效果是一樣的。b.const修飾指標有4種形式。區分清楚這4種即可全部理解const和指標。1 const int p ...