c++有關指標的資料型別和指標運算的小結
前面已用過一些指標運算(如p++,p+i等),現在把全部的指標運算列出如下。
1) 指標變數加/減 乙個整數
例如:p++,p--,p+i,p-i,p+-i,p-=i等。
c++規定,乙個指標變數加/減乙個整數是將該指標變數的原值(是乙個位址)和它指向的變數所占用的記憶體單元位元組數相加或相減。如p+i代表這樣的位址計算:p+i*d,d為p所指向的變數單元所占用的位元組數。這樣才能保證p+i指向p下面的第i個元素。
2) 指標變數賦值
將乙個變數位址賦給乙個指標變數。如:
p=&a; //將變數a的位址賦給p
p=array; //將陣列array首元素的位址賦給p
p=&array[i]; //將陣列array第i個元素的位址賦給p
p=max; //max為已定義的函式,將max的入口位址賦給p
p1=p2; //p1和p2www.cppcns.com都是同型別的指標變數,將p2的值賦給p1
3) 指標變數可以有空值,即該指標變數不指向任何變數,可以這樣表示:
p=null;
實際上null代表整數0,也就是使p指向位址為0的單元。這樣可以使指標不指向任何有效的單元。實際上系統已先定義了null:
#define null 0
在iostream標頭檔案中就包括了以上的null定義,null是乙個符號常量。應注意,p的值等於null和p未被賦值是兩個不同的概念。
任何指標變數或位址都可以與null作相等或不相等的比較,如:
if(p==null) p=p1;
4) 兩個指標變數可以相減
如果kvfogzctk兩個指標變數指向同乙個陣列的元素,則兩個指標變數值之差是兩個指標之間的元素個數,見圖6.25。
假如p1指向a[1],p2指向a[4]www.cppcns.com,則p2-p1=(a+4)-(a+1)=4-1=3,但p1+p2並無實際意義。
5) 兩個指標變數比較
若兩個指標指向同乙個陣列的元素,則可以進行比較。指向前面的元素的指標變數小於指向後面元素的指標變數。如圖6.25中,p1
6) 對指標變數的賦值應注意型別問題
在本章前幾節中介紹了指標的基本概念和初步應用。應該說明,指標是c和c++中重要的概念,是c和c++的乙個特色。使用指標的優點是:
提高程式效率;
在呼叫函式時,如果改變被呼叫函式中某些變數的值,這些值能為主調函式使用,即可以通過函式的呼叫,得到多個可改變的值;
可以實現動態儲存分配。
但是同時應該看到,指標使用實在太靈活,對熟練的程式人員來說,可以利用它編寫出頗有特色的、質量優良的程式,實現許多用其他高階語言難以實現的功能,但也十分容易出錯,而且這種錯誤往往難以發現。
c++指標陣列和指向指標的指標
指標陣列的概念
如果乙個陣列,其元素均為指標型別資料,該陣列稱為指標陣列,也就是說,指標陣列中的每乙個元素相當於乙個指標變數,它的值都是位址。一維指標陣列的定義形式為:
型別名 *陣列名[陣列長度];
例如:int *p[4];
可以用指標陣列中各個元素分別指向若干個字串,使字串處理更加方便靈活。
【例】若干字串按字母順序(由小到大)輸出。
#include
using namespace std;
int main( )
; //定義指標陣列
int n=5;
sort(name,n);
print(name,n);
return 0;
}void sort(char *name,int n) }}
void print(char *name,int n)
; p=name+2; //見圖6.23中p的指向
cout<
執行結果為:
c++c
指標陣列的元素也可以不指向字串,而指向整型資料或單精度型資料等。
在本章開頭已經提到了「間接訪問」乙個變數的方式。利用指標變數訪問另乙個變數就是「間接訪問」。如果在乙個指標變數中存放乙個目標變數的位址,這就是「單級間址」,見圖6.24(a)。指向指標的指標用的是「二級間址」方法。見下圖。從理論上說,間址方法可以延伸到更多的級,見下圖。但實際上在程式中很少有超過二級間址的。
本文位址:
指標的資料型別和指標運算小結
有關指標的資料型別 定義含義 int i 定義整形變數 int p 定義只想整型資料的指標變數p int a n 定義整形陣列a,它有n個元素 int p n 定義指標陣列p,它由n個指向整形資料型別的指標元素組成 int p n 定義指向n個元素的一位陣列的指標變數 int f f為帶回整形函式值...
C資料型別相關問題
位元組數 char 1 short 2 int 由平台 編譯器 決定,可能是2或4,通過sizeof獲知 long 由平台 編譯器 決定,可能是4或8 float 4 double 8 char float x86,4位元組,x64,8位元組 資料範圍 signed char 1位元組 128 12...
資料型別和基本運算
今天總結下資料型別和基本運算 1.命名空間 2.資料型別 整形 int 浮點 float double 布林型別 bool 字元 char 引用 string object 3.變數的命名 例如 int age 20 string name zhangsan 4.變數的宣告和賦值 int age a...