1.int *p;
p是一般指標,用於指向整形量。被指向的整形量可以是簡單的整形量,也可以是一維整形陣列或二維整形陣列中的乙個元素,因為陣列的每乙個元素都是整形量。int *型別的指標與一維整形陣列名在資料型別上等價,即一維整形陣列名是指標,其型別也是int *。注意,p是指標變數,其值可變;而陣列名是指標常量,其值不可變。
2.int (p)[m];
p指向含有m個元素的一維陣列。可指向每行含有m個元素的二維陣列的一樣,也就是說他是二維陣列的行指標,p與二維陣列名在資料型別上等價。若有定義「int a[n][m];」,則p和a的型別都是int ()[m]。
例如:
int a[3]
[4],
(*p)[4
];p=a;
//將陣列a的首位址賦值給指標p,p指向a[0]
p++; //正確,因為p是指標變數,p指向a[1],a行
a++; //錯誤,因為a是指標常量
a行運算結束後p指向a陣列的下一行元素,即指向a[1]。a[1]是乙個位址運算表示式,是「虛」的位址表示。所謂「虛」是指a[1]本身不佔儲存空間。請與下述第四點比較。
3.int *p[m];
p是指標陣列,含有m個元素,每個元素都是整形指標。p指標的型別是int *[ ]。
4. int **p;
p是指向整形指標的指標。p指標的型別是int **,與整形指標陣列名的型別是int *[ ]等價。
例如:
int
*a[10],
**p;
p=a;
p++;
//正確,因為p是指標變數,a行
a++;
//錯誤,因為a是指標常量
a行運算結束後,p指向a陣列的下乙個元素,即指向a[1]。a[1]是具有儲存空間的乙個指標,是乙個「實」的位址表示。所謂「實」是指a[1]本身佔儲存空間。
5. int (*p)(int,int);
p是乙個函式指標,可指向引數是兩個整形量並且返回整形量的函式。從語法形式上卡,本節中第2點、第3點定義二維陣列行指標和指標陣列是,使用的軍事方括號,只有在定義指向函式的指標時,使用的是圓括號。
6.int *f()
與前面的1~5點不同,這是函式定義(函式體內部的語句被省略了),f是函式名,它返回整形指標,即發揮值型別為int *。本節前面1~5節定義了五種不同型別的指標變數,而本函式定義知識制定函式的返回值型別是指標型別的量,並沒有引入新的指標型別,知識將第1點中國定義的最普通的指標作為函式的返回值。可以類推,如果有函式定義 int **f(),則表示函式的返回值型別為指向整形指標的指標。
7.void型別指標
此類指標比較特殊,在用法上要注意以下兩點。
(1)任何型別的指標都已直接賦值給void型別的指標,無須進行強制型別轉換。如:
void
*p1;
int x,
*p2=
&x;p1=p2;
void型別指標也可以直接賦值給其他型別的指標,但最好進行強制型別轉化,以明確表示指標的型別,例如:
p2=
(int
*) p1;
(2)不能對void指著進行算術運算。
8.空指標null
c++將斧蛤常量null的值定義為0,通常用來表示乙個空指標。例如:
int
*p=null
;//表示用空指標null初始化指標變數p
int m=0;
//表示用整形常量0初始化整型變數m
c++規定,若乙個指標值為null,他是空指標,不指向任何量。儘管null的值與0相同,但是兩者的意義不同。假定指標變數為p,判斷它是否為空指標的if語句可以使「if(p == null)」或「if(p!=null)」,強調p是指標變數。但不要寫成「if(p==0)」或「if(p!=0)」,他們都影響程式的可讀性,同理,也不要寫成「if§」或「if(!p)」。 c程式設計 指標小結
1.首先要準確地弄清楚指標的含義。指標就是位址,凡是出現 指標 的地方,都可以用 位址 代替,例如,變數的指標就是變數的位址,指標變數就是位址變數 要區別指標和指標變數。指標就是位址本身,而指標變數是用來存放位址的變數 2.什麼叫 指向 位址就意味著指向,因為通過位址能找到具有該位址的物件。對於指標...
c 指標小結
宣告指向特定型別的指標,使用以下格式 typename pointername 示例 double pn 宣告乙個double型別的指標 char pc 宣告乙個char型別的指標應將記憶體位址賦值給指標,對變數名應用 運算子,來獲得變數位址,或使用new運算子返回未命名的記憶體位址。示例 doub...
C語言之const常量(摘自C和指標)
c語言中我們可以使用const和define關鍵字宣告常量,所謂常量就是指值不能修改的量。如下面的例子所示 int const a const int a 這兩條語句都把a宣告為乙個常量 整數 它的值不能被修改。由於常量的值無法被修改,所以不能用任何其他東賦值給它,如此一來,怎樣使它在一開始就擁有乙...