iOS概念入門學習 C語言 指標

2021-07-04 14:01:18 字數 2331 閱讀 2834

概述:本文簡要介紹了指標的概念、定義方法和簡單地應用,指標是乙個十分複雜的工具,還包含各種類別,如:字串指標、結構體指標、函式指標等,此文僅只作入門而已。

提起指標的意義,不得不說到變數的訪問方式,變數的訪問方式分為兩種:直接訪問和間接訪問。如下圖:

直接訪問:變數的賦值和取值(通過變數名進行訪問值)

間接訪問:通過指標(位址)間接操作完成。

1)為函式提供修改呼叫變數的靈活手段;

2)讓函式有多個返回值;

3)可以改善某些子程式的效率 >>在資料傳遞時,如果資料塊較大(比如說資料緩衝區或比較大的結構),這時就可以使用指標

傳遞位址而不是實際資料,即高傳輸速度,又節省大量記憶體;

4)為動態資料結構(如二叉樹、鍊錶)提供支援。

其中(2)點將在下面指標的應用中有具體的例項體現。

在c語言中,允許用乙個變數來存放指標,這種變數稱為指標變數。因此,乙個指標變數的值就是某個記憶體單元的位址或稱為某記憶體單元的指標。

注意:

嚴格意義上說,指標是乙個位址,是乙個常量

指標變數是存放乙個位址,是乙個變數對指標變數的定義包括三個內容:

- 1)指標型別說明,即定義變數為乙個指標變數;

- 2)指標變數名;

- 3)變數值(指標)

其一般形式為:

型別說明符 *變數名;
其中,*表示這是乙個指標變數,變數名即為定義的指標變數名,型別說明符表示本指標變數所指向的變數的資料型別。

注意:

- 1)在定義指標時,「*」號表示定義的變數是指標變數,變數的值只能存放位址。

- 2)乙個型別的指標只能指向同型別的變數,不能指向其他型別的變數。

- 3)指標也可以被宣告為全域性、靜態區域性和區域性的。

如果指標變數p已指向陣列中的乙個元素,則p+1指向同一陣列中的下乙個元素,p-1指向同一陣列中的上乙個元素。對於陣列a和指向陣列a的指標p來說:

- 1)如果p的初值為&a[0],則p+i和a+i就是陣列元素a[i]的位址,或者說,它們指向a陣列 序號為i的元素

- 2)(p+i)或p+i或a(a+i)是+i所指向的陣列元素,即a[i]。

- 3)如果指標p1和p2都指向同一陣列

結論: 引用乙個陣列元素,可用下面兩種方法:

- 1)下標法,如a[i]形式

- 2)指標法,如(a+i)或(p+i)收地

- 3)a是常量(a++錯誤),p是變數(p++正 確)

由於位址直接操縱了位址,所以在函式中操縱位址內儲存的變數的話,變數的值也會得到修改,**如下:

程式中並沒有通過返回值來修改兩個引數的值而是交換了位址內儲存的內容,從而更「徹底」地交換了引數的值,可見指標是多麼強大的工具啊。

在c語言中,可以用兩種方法訪問乙個字串,

- 1)字元陣列

char string=」i love china!」;

printf("%s\n",string);

- 2)字串指標指向字串

char *變數名="字串內容"; //"字串內容"是常量

har *str="abc"

char ch = 'b';

char *p1 = &ch;

字串指標變數的定義說明與指向字元變數的指標變數說明是相同的。只能按對指標變數的賦值不同來區別。對指向字元變數的指標變數應賦予該字元變數的位址。

定義的同時進行初始化

char *ps="c language";

等效於先定義後初始化:

char *ps;

ps="c language";

在之前的學習中,我們已經學習了字串,但是個人感覺,字串有一點十分不方便的地方就在於,定義的時候要設定字串的長度,而字串指標則不同,字串指標內只是儲存了字串的首位址,至於字串有多長,並沒有那麼苛刻的限制,但是字串指標也有侷限性,就是需要把指標指向乙個字串,或是需要手動malloc一段記憶體空間給字串。另外值得注意的是,定義乙個字串後,不能通過scanf的方式獲取使用者錄入的內容,否則會報錯!

iOS概念入門學習 C語言 結構體

構造資料型別 構造資料型別是根據已定義的乙個或多個資料型別用構造的方法來定義的。也就是說,乙個構造 型別的值可以分解成若干個 成員 或 元素 每個 成員 都是乙個基本資料型別或又是乙個構造型別。在c語言中,構造型別有以下幾種 陣列型別 結構體型別 共用體 聯合 型別 結構體是一種構造型別,它是由若干...

iOS概念入門學習 C語言 字串

概要 本文介紹了字串的概念 定義方法和常用的函式,並用例項加以串聯以說明字串的用法。字串是位於雙引號中的字串行。字串即字元陣列。在記憶體中以 0 結束,所佔位元組比實際多乙個 注意 1.可以把乙個字元常量賦給乙個字元變數,但不能把字串常量賦給字元變數 2.c語言中沒有字串變數,可以用字元陣列來存放字...

C語言 指標入門

在我年輕的時候,我三次鼓起勇氣學習c,三次都倒在了指標上 雖然很清楚指標是一種存放位址的變數,但是他具體是乙個什麼意思呢?我把整個空間看成乙個 n 1 維的空間。n 是資料型別,可能是int,char,double,等等。1 是位址。把位址看成一根數軸。舉個粒子 int pa int a 5 pa ...