菜鳥學習歷程 6 關鍵字 指標

2021-08-10 19:34:01 字數 2648 閱讀 9367

關鍵字

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 ...