1. 在程式中定義了乙個變數,在對程式進行編譯時,系統就會給這個變數分配記憶體單元。編譯系統根據程式中定義的變數型別,分配一定長度的空間。一般整形變數分配4個位元組,字元型變數分配1個位元組。記憶體區的每乙個位元組有乙個編號,即「位址」。
2. 由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。將位址形象化的稱為「指標」。
3. 在程式中一般是通過變數名來引用變數的值。實際上,是通過變數名找到儲存單元的位址,從而對儲存單元進行訪問操作的。程式經過編譯以後已經將變數名轉換為變數的位址,對變數值的訪問都是通過位址進行的。
4. 可以定義一種特殊的變數,用它存放位址。
5. 指向就是通過位址來體現的。由於通過位址能找到所需的變數單元,因此說,位址指向該變數單元。將位址形象化地稱為「指標」意思是通過它能找到以它為位址的記憶體單元。
6. 乙個變數的位址稱為該變數的「指標」。如果有乙個變數專門用來存放另一變數的位址(即指標),則它稱為「指標變數」。指標變數就是位址變數,用來存放位址,指標變數的值是位址(即指標)。注意區分「指標」和「指標變數」。指標是乙個位址,而指標變數是存放位址的變數。
7. 定義指標變數的一般形式為
型別名 *指標變數名;
如 int *pointer_1,*pointer_2;
左端的int是在定義指標變數時必須指定的「基型別」。指標變數的基型別用來指定此指標變數可以指向的變數的型別。
說明:(1) 指標變數前面的「*」表示該變數的型別為指標變數。指標變數名是pointer_1和pointer_2,而不是*pointer_1和*pointer_2。
(2) 定義指標變數時必須指定基型別。因為,不同型別的資料在記憶體中所佔的位元組數和存放方式是不同的(如整型4位元組,字元型佔1位元組)。如果想通過指標引用乙個變數,只知道位址是不夠的,因為無法判定是從乙個位址的乙個位元組中取出乙個字元資料還是從乙個位址的四個位元組取出乙個整型資料。另外,指標的運算(指標加一或減一)要根據指標變數的型別來計算。
8.(1)& 取位址運算子。&a是變數a的位址。
(2)* 指標運算子(或稱「間接訪問」運算子),*p代表指標變數p指向的物件。
9.指標變數作為函式引數
函式定義:
void swap(int *p1,int *p2)
函式呼叫:
int *pointer_1,*pointer_2;
pointer_1= &a;pointer_2 = &b;
swap(pointer_1,pointer_2);
c中,陣列名(不包括形參陣列名,形參陣列名不佔據實際的記憶體單元)代表陣列中首元素的位址。例如下面兩條語句等價
int *p;
int a[10] = ;
p = &a[0];與p = a;//兩條語句等價
在引用陣列元素時指標的運算(指標即位址,很明顯對位址進行乘除運算是沒有意義的),但是在一定條件下對指標進行加和減是允許的,即,當指標指向陣列元素的時候,是可以對指標進行加和減的。
說明:如果指標變數p已指向陣列中的乙個元素,則p+1指向同一陣列的下乙個元素,p-1指向同一陣列中的上乙個元素。注意:執行
p+1時並不是將
p的值(位址)簡單加
1,而是加上乙個陣列元素
所占用的位元組數。
11.通過指標引用陣列元素
下標法,如a[i]形式;
指標法,如*(a+i)或*(p+i).
12.使用指針對陣列運算比較快
int a[10];int *p;
for(p = a;p<(a+10);p++)
cout<<*p;
摘自《c程式設計》譚浩強編著
簡述 C 指標
看乙個一級指標例子 include int main 執行結果 foo.5 foo.0x7ffec682940c 取位址操作 foo p.0x7ffec682940c foo p 存 的值是foo的位址 foo p.0x7ffec6829410 取位址操作 foo p.5 引用操作符 foo p 獲...
C語言指標簡述
在c語言中,指標型別一般以資料類 型 變數 名 color 資料型別 變 量名的格式出現,如 int p 其實這並不有助於理解,而在c 中,指標型別允許如下寫法 int p 因此,我個人認為可以借助c 的格式來理解,指標從圖示上理解為指向某某某變數的指標,實際可以把指標當成一種新的變數型別,稱為指標...
函式指標簡述
1 函式指標的實質 a 函式指標的實質還是指標變數,不過指標指向的是函式。b 指標,函式指標,陣列指標都是指標。只不過指向的內容不同。都占用4個位元組。32位系統中都是4個位元組 c 函式指標就是乙個普通的指標變數。變數的型別是乙個函式指標變數型別。它的值是某個函式的位址。d 函式的實質是一段連續分...