1.指標和記憶體
c程式在編譯後,會以三種形式使用記憶體
1靜態/全域性記憶體
靜態宣告的變數分配在這裡,全域性變數也使用這部分記憶體。這些變數在程式開始執行時分配,直到程式終止時才會消失
2.自動記憶體
這些變數在函式內部宣告,並且在函式呼叫時才被建立。他們的作用域侷限於函式內部,而且生命週期限制在函式的執行時間內。
3.動態記憶體
記憶體分配在堆上,可以根據需要釋放,而且直到釋放才會消失。指標引用分配的記憶體,作用域限與引用記憶體的指標。
如何閱讀指標說明
1const
int *ptr;
2#**解讀31
.ptr 是有個變數42
.ptr 是乙個指標變數53
.ptr是乙個指向整型的指標變數
64.ptr是乙個指向常數常亮的指標變數
用間接引用操作符(*)接引指標
1int num = 5;2
int *ptr = #
3 printf("
%d\n
",*ptr);
4 #指標的接引 *ptr
我們也可以把接引操作符的結果用作左值。術語左值是指賦值操作符左邊的運算元,所有左值都必須可以修改,因為他們會被賦值。
null的概念
任何時候都不能對null指標進行接引,因為它並不包含合法位址
0的含義可能隨著**的不同而含義不同
1int num = 9; 2
int *ptr = 0
;#此時的0為null
3 *ptr - 0;#此時的0為常數0
指標操作符
* 用來宣告指標
* 用來解引指標
-> 指向指標
+ 用於指標做加法
- 用於指標做減法
== != 比較兩個指標
> < >= <= 比較兩個指標
1int vector =
2int * ptr =vector;
3 printf("
%d\n
",*ptr);
4#輸出的值為1
5 ptr += 1
;6 printf("
%d\n
",*ptr);
7 ptr += 1
;8 printf("
%d\n
",*ptr);
9#輸出的值為1
10 ptr += 1
;11 #輸出的值為1
每次的指標加一,位址就加4
指標做減法
1int vector = ;
2int *ptr = vectoe + 2
;3 printf("
%d\n
",*ptr);
4#列印出的值是7;
5 ptr --;
6 printf("
%d\n
",*ptr);
7 #列印出的值是41;
ptr的每次減一,位址都會向前移動四個位元組
指標相減
兩個指標相減會的到兩個指標的位址上的差值,可以判斷陣列中的元素順序。
c 指標的認識
1 如何判斷指標型別?從語法的角度看,你只要把指標宣告語句裡的指標名字去掉,剩下的部分就是這個指標的型別。這是指標本身所具有的型別。讓我們看看例一中各個指標的型別 1 int ptr 指標的型別是int 2 char ptr 指標的型別是char 3 int ptr 指標的型別是int 4 int ...
c語言中認識指標
位址和變數的概念 指標作用 1 表示複雜的資料結果 eg 鍊錶 樹 2 能動態分配記憶體 3 方便的使用字串 4 有效而方便使用字串 5 有效而方便的使用陣列 呼叫函式的時候能夠獲得1 個以上的結果。6 能夠直接處理單元位址等 總結 可以看到可以很直接的接觸到計算機的硬體的內容進行操作。1 資料的儲...
認識C語言指標(一)
說到指標,就會出現一些複雜型別,如果對這些複雜型別不太了解,在用到指標有時就會比較懵。乙個型別裡面會有很多運算子,其優先順序和運算優先順序一樣,只需要遵循乙個原則 從變數名處起,根據運算子優先順序結合,一步一步分析 先來看看簡單的型別 int p 這是乙個普通的整型變數 int p 先從p處開始,先...