宣告指向特定型別的指標,使用以下格式:
typename *pointername;
示例:
double *pn; //宣告乙個double型別的指標
char *pc; //宣告乙個char型別的指標
應將記憶體位址賦值給指標,對變數名應用&運算子,來獲得變數位址,或使用new運算子返回未命名的記憶體位址。
示例:
double *pn;
double *pa;
char *pc;
double doub = 3.2;
pn = &doub; //使用&運算子給指標賦值
pc = new char; //使用new給指標賦值
pa = new double[30]; //使用new給指標賦乙個陣列位址值
對指標解除引用意味著獲得指標指向的值。對指標應用解除引用或間接運算子(*)來解除引用。因此,如果pn值指標,則*pn是指標指向的數值。
示例:
char a = 'y';
char *pa = &a; //指標pa指向a的位址
*pa = 's'; //將指標指向的值改為s
cout << a; //輸出s
另一種對指標解除引用的方法是使用陣列表示法,例如,pa[0]和*pa是一樣的。絕對不要對未被初始化未適當位址的指標解除引用。
如果pt是指向int的指標,則*pt不是指向int的指標,而是完全等同於乙個int型別的變數。pt才是指標。
示例:
int *pt = new int; //宣告乙個指標並初始化
*pt = 5; //*pt 相當乙個int型別的變數,可以直接賦值
在多數情況下,c++將陣列名視為陣列第乙個元素的位址。
如: int tacos[10]; //tacos 相當於 &tacos[0]
一般例外情況是,將sizeof運算子用於陣列名時,此時將返回整個陣列的長度(單位為位元組)。
c++允許將指標和整數相加。加1的結果等於在原來位址加上指向的物件占用的總位元組數。還可以乙個指標減去另乙個指標,或得兩個指標的差。後一種運算將得到乙個整數,僅當兩個指標指向同乙個陣列是,這種運算才有意義,這將得到兩個元素的間隔。
示例:
int tacos[10] = ;
int *pt = tacos; //pt指向陣列第乙個元素的位址
pt = pt+1; //pt指向第二個元素位址
int *pe = &tacos[9]; //pe指向第10個元素位址
pe = pe - 1; //pe指向第9個元素位址
int diff = pe - pt; //獲得陣列第9個元素與第2個元素的位址差,將結果儲存在diff中
使用陣列宣告來建立陣列是,採用的是靜態聯翩,即陣列的長度在編譯的時候設定:
int tacos[10]; //使用靜態聯翩,即在編譯時已設定好
使用new 運算子建立陣列是,將採用動態聯翩(動態陣列),即將在執行時為陣列分配空間,其長度也將在執行時設定好。使用完後,應使用delete 釋放其占用的記憶體:
int size;
cin >> size;
int *pz = new int[size]; //向記憶體申請一塊空間
......
delete pz; //釋放記憶體
使用方括號陣列表示法等同於對指標解除引用,陣列名和指標變數都是如此,因此對於指標和陣列名,既可以使用指標表示法,也可以使用陣列表示法。
示例:
int *pt = new int[10];
*pt = 5; //將第乙個元素賦值為5,相當於pt[0]=5;
pt[0] = 6; //相當於*pt = 6;
pt[9] = 7; //相當於*(pt+9) = 7;
int coats[10];
*(coats + 4) = 12; //相當於coats[4] = 12
C指標小結1
c指標小結1 我認為c語言的核心就是指標和對記憶體的操作,而操作記憶體就是由指標實現的,所以說指標真的非常非常重要,在後邊的資料結構的學習中更要用指標,如果你立志要走c系統的開發這條路,那麼你就應當精通指標的各種應用。下面寫一點博主在學習指標時的一點小心得,小體會 僅僅一家之言 在剛學習指標時是真的...
C指標小結3
c指標小結3 現在總結指標的更高一級的用法,其中指向函式的指標在我的博文中已經單獨介紹過了,將會補充介紹幾點,現在介紹別的指標的用法。首先介紹幾個陷阱 int f int f 這兩個宣告都是非法的,如果有人問這兩個宣告什麼意思,我們應當不加思索的說出這是錯誤地宣告,博主就曾經苦苦思考過這兩個宣告的意...
c程式設計 指標小結
1.首先要準確地弄清楚指標的含義。指標就是位址,凡是出現 指標 的地方,都可以用 位址 代替,例如,變數的指標就是變數的位址,指標變數就是位址變數 要區別指標和指標變數。指標就是位址本身,而指標變數是用來存放位址的變數 2.什麼叫 指向 位址就意味著指向,因為通過位址能找到具有該位址的物件。對於指標...