指標和陣列

2021-08-25 08:45:55 字數 2038 閱讀 8332

指標是記憶體物件的簡單位址,用指標,可以間接的訪問這些物件(知道記憶體單元的位址,當然就能夠訪問到記憶體單元了)。

簡單的把資料作為引數傳入函式,函式即使修改引數的內容也不會對呼叫者中的資料產生影響(看了之前的函式底層實現,應該很容易的知道這是為什麼),而使用指標,使得函式可以修改呼叫者傳遞進來的引數(傳遞的是位址,可以通過位址訪問到對應的記憶體物件,接著就可以對其做修改了)

陣列就是記憶體中一組用來儲存資料序列的連續空間(還記得彙編的偽操作指令stringz嗎?連續占用n+1記憶體用於存放n個字元,陣列的原理和這個類似),通過array[i]來訪問陣列array中第i+1個元素(陣列下標從0開始)

指標:宣告指標變數

type *ptr; //宣告乙個type型別的指標變數
指標變數的初始化和普通變數一致,如果作為區域性變數將不會自動初始化。

指標運算子:

位址運算子(&)、間接引用運算子(*)

位址運算子生成乙個它的運算元的記憶體位址,該運算元肯定是乙個記憶體物件。

間接引用符的作用是允許我們間接的訪問記憶體物件的值。

int v1; //宣告乙個int型變數v1

int *ptr; //宣告乙個int型指標變數ptr

v1 = 666;

ptr = &v1; //取v1的位址並賦值給p1

*ptr = *ptr + 1; //取ptr指向的位址的記憶體單元值(即v1)並+1 等價於v1=v1+1

++ptr;//修改ptr本身值就是修改位址,即修改指向的記憶體單元,ptr這下已經不指向v1了

指標傳遞乙個引用

我們可以把函式的引數定義為指標型別,這樣就可以通過傳遞指標來修改對應的值了。

//交換a b, 想想不用中間變數temp如果實現交換, 提示 a^b^b = a;

void swap(int* a, int* b)

int main()

空指標:

有時候,我們希望指標不指向任何東西,我們稱為空指標,c語言中的空指標是這樣的

int *ptr;

ptr = null;

c語言中null是乙個特別定義的預處理巨集,包含乙個「非空指標」不可能包含的值,特定系統null可以定義為數值0,因為位址0不存在任何有效的記憶體物件。

陣列:陣列用於存放一組連續的擁有相同型別的資料。

陣列宣告:

int a[10]; //乙個包含10個位址位用於存放int型資料的陣列

void func1(int size)

其中a[0]在低位位址,a[9]在高位位址。陣列的項數必須是確定值而不是引數形式

int a[10];

int *ptr;

ptr = a; //將ptr指向陣列的開始位址即a[0]所在位址

++ptr; //指向a[1]

int b = a[5]; //取a中第6個元素,注意下標從0開始

a引用的是陣列首元素的位址,且a不可修改。

陣列引數:

函式間傳遞陣列,天生採用的是"傳址"方式。(即傳入的引數為陣列的首元素位址)

void func1(int a)

void func()

; printf("before: %d,%d\n", a[0], a[1]);

func1(a);

printf("after: %d,%d\n", a[0], a[1]);

}

c語言字串:

c語言的字串本質是char陣列。

char str[10];
注意字串結尾處是乙個空字串,代表字串的結束,這個空字串表示為'\0',結束符本身也是乙個字元,會占用陣列的乙個位置,所以,上面宣告的字串實際只能存放9個字元。(注意,字元陣列的長度不代表字串長度,已結束符之前字元長度為準)

c語言的陣列不提供陣列越界保護(這意味著必須小心的運算元組,陣列越界可能導致嚴重的後果)

指標陣列和陣列指標

有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 inta 1 int p a 指標的指標 int p2p p 簡單陣列 intb 20 指標陣列 int p 10 指標陣列,含有10個指標元素,即每乙個元素都是乙個指標 陣列指標 int p 10 這個指標用來指向...

指標陣列和陣列指標

理解這兩個概念,當從語言學的語法角度開始,定語 名詞,即 的 語句。指標陣列 指標的陣列 陣列指標 陣列的指標。一 指標陣列 元素為指標的陣列 顧名思義,就是說的首先是乙個陣列吧,然後陣列的元素是指標而已。說明形式為 type pointer array constant1 constant2 co...

指標陣列和陣列指標

該文時自己對指標陣列用法的一點總結,還望高手指點不足原文如下 由於以前對指標陣列不太明白,所以自己寫了 乙個小的測試程式來驗證了自己的猜測,先總結如下 指標陣列,由名字就可以知道的該陣列中的成員都是為指標的。其定義的方法為 char p 5 該初定義乙個包含5個char 型別的陣列的指標,由於p本身...