1. 對指標進行遞增和遞減
在程式中,我們有時會對指標進行「++」、「--」操作,這時需要注意的是對指標的遞增或遞減操作的結果是指標指向了記憶體塊中的相鄰的值(並不是加減1個位元組),編譯器自動認為記憶體中相鄰的值也是本型別的。例如當前指標型別為int,則對指標進行加1後,指標的數值增加4位元組(sizeof(int)),指向下乙個int數值。
#include
using
namespace
std;
intmain
() // display
cout
<< "output: ";
for(int i = 0; i < count; i++)
cout
<< endl;
delete point;
return0;}
複製**
輸出:
enter your 0 num:1
enter your 1 num:2
enter your 2 num:3
output: 1 2 3
複製**
2. 指標與const關鍵字
我們都知道const關鍵字修飾的變數不可再更改,但是const不僅能修飾一般變數也能修飾指標,但是由於指標的複雜性,const修飾指標可以簡要分為以下三種情況:
int day = 31;
int* const pday = &day;
*pday = 1; // 允許
複製**
const修飾指標本身,也即修飾指標指向的數值,該數值為常量,不能再改變;
int day = 31;
const
int* pday = &day;
*pday = 1; // 錯誤!
int newday = 29;
pday = &newday; // 允許
複製**
const即修飾指標的數值也修飾指標本身,則兩者都不能再改變。 將指標傳遞給函式時,這種形式很有用,兩者都不能被修改,以確保函式不會修改指標。
3. 使用指標的注意項
記憶體洩露:在使用new動態分配記憶體時一定要在結束時delete釋放。
指標指向無效的記憶體單元:因為指標不要求一定要初始化(引用要求初始化),所以指標無初始化可能會導致程式崩潰。
檢查使用new分配記憶體的請求是否成功。
與指標不同,首先在宣告引用時必須將其初始化為乙個變數,後面不允許再引用其他變數。這也是引用的優點,使用指標作為形參時我們不能保證指標的資料的合法性,可能指向了越界或不存在的位址;但是引用宣告時就必須初始化,不會無效。
1. 在**使用引用
當我們呼叫函式時:
// 1. 呼叫時引起拷貝
returntype myfunc
(type param)
;returntype result = myfunc(argument);
// 2. 呼叫時引用不需要複製
returntype myfunc
(type& param)
;returntype result = myfunc(argument);
複製**
如上所示,當呼叫函式「myfunc」時,需要將變數argument複製到形參param中,如果argument資料量比較大時這個複製過程就會比較耗時。但是當使用引用時,argument是按引用傳遞,不需要耗時的拷貝過程。
2. 使用const修飾引用
int num = 30;
const
int& constref = num;
constref = 31; // 錯誤!不允許更改
int& normalref = constref; // 錯誤!normalref不是const型別的
複製**
指標與引用
摘自 高質量c 程式設計 指標與引用,在more effective c 的條款一有詳細講述,我給你轉過來 條款一 指標與引用的區別 指標與引用看上去完全不同 指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。你如何決定在什麼時候使用指標,在什麼時候使用...
引用與指標
引用就是物件的另乙個名字,在實際的程式中,引用主要用作函式的形式引數。引用是一種復合型別,通過在變數名前新增 符號來定義。復合型別是指用其他型別定義的型別。在引用的情況下,每一種引用型別都 關聯到 某一其他型別。引用必須用與該引用同型別的物件初始化。當引用初始化後,只要該引用存在,它就保持繫結到初始...
指標與引用
include iostream using namespace std void testref int i 10 引用不可以為空,他是乙個物件的別名 int ref i ref cout i 00824f1e mov dword ptr i 1 把i的位址傳入eax 並把eax指標的位址傳給re...