標籤:
首先我們定義一個表示年齡的指標:
int* page; 這就是定義了一個指標,和定義普通變數就多了一個*符號而已。
為什麼變數名用了p開頭,這裡引用了英文pointer(指向),表示它是一個指標,而非普通變數,加不加p都無所謂。
1.*號是取值運算子(間接訪問),這裡不是乘號的意思
2.*號必須放在指標類型和指標變數中間,擺在哪裡無所謂
有3種方式:int* page; int *page; int * page;
第一種是比較正規的寫法,第2種是用的最多的,但是最好不要用第3種。
一、明確幾個概念:
1.指標也是一種資料類型
int* 這裡表示定義了指向int類型變數的指標,並不是說定義了int類型的指標
int* page 這裡page是指標變數,它只能存放地址,C語言規定,只有指標類型的變數才能存放地址,不是你隨隨便便定義一個變數就能存放的。
2.定義指標的時候兼具兩個功能
int *page=&age; 不僅擷取了age的地址,同時也擷取了age變數的值。
3.指標使用之前必須先初始化,指標類型與指標指向類型一致。
4.地址
每個變數都有自己的地址,且都是唯一不重複的,而且地址不一定全都是數字。
5.直接存取和間接訪問
- 直接存取:按變數地址存取變數值
- 間接訪問:通過存放變數地址的變數去訪問變數
二、指標數組&數組指標
1.指標和數組的關係
數組名就是一個指標,即地址
int a[5] 這是一個int類型的數組
它有5個元素,分別為a[0],a[1],a[2],a[3],a[4],這5個都是變數,和普通變數沒多大區別
這個數組的名字是a,可別弄成a[5]了
a是一個指標常量(地址無法改變,不能指向其他變數), 它只儲存著數組第一個元素的地址,即a[0]的地址
所以我們用scanf()輸入字串的時候不需要&
char a[5]
scanf("%s",a)
為什麼只儲存著第一個元素的地址,那其他元素怎麼辦?
C語言中,數組的記憶體配置是連續的,也就是連在一起的,如果數組第一個元素的地址是1000,那第2個則是1001,所以知道了第一個元素的地址,就可以知道其他元素的地址。
2.指標數組&數組指標
指標數組:array of pointers,即用於儲存指標的數組,也就是數組元素都是指標
數組指標:a pointer to an array,即指向數組的指標
還要注意的是他們用法的區別,下面舉例說明。
int* a[4] 指標數組
表示:數組a中的元素都為int型指標
元素表示:*a[i] *(a[i])是一樣的,因為[]優先順序高於*
int (*a)[4] 數組指標
表示:指向數組a的指標
元素表示:(*a)[i]
注意:在實際應用中,對於指標數組,我們經常這樣使用:
1 typedef int* pInt;2 pInt a[4];
View Code
這跟上面指標數組定義所表達的意思是一樣的,只不過採取了類型變換。
代碼示範如下:
1 include <stdio.h> 2 3 int main() 4 { 5 int c[4]={1,2,3,4}; 6 int *a[4]; //指標數組 7 int (*b)[4]; //數組指標 8 b=&c; 9 //將數組c中元素賦給數組a10 for(int i=0;i<4;i++)11 {12 a[i]=&c[i];13 }14 //輸出看下結果15 printf("%d",a[1])l; //輸出2就對16 printf("%d",(*b)[2]); //輸出3就對17 return 0;18 }View Code 參考文獻:
1.指標數組和數組指標的區別
2.從零開始學編程---第一步-C語言
Empire C:Basic 3