個人真的感覺這是一塊比較複雜的地方,雖然現在經歷的是從c的公升遷以及從c#的回歸,但是我個人的感覺,c對於指標的描述與應用是相當重要的,而c#中指標的概念已經被淡化了,也就是說,至少是日常的應用開發,很少再使用到指標了。其中c++似乎是個過渡,因為很多人都在將c++中指標是最不建議是用的嚎頭。
首先是概念:
指標(pointer)是用來指向實際記憶體位址的變數,一般來說,指標是整型,而且一般的大家會接受十六進製制的輸出格式。
引用(reference)是其相應變數的別名,用於向函式提供直接訪問引數(而不是引數的副本)的途徑,與指標相比,引用是一種受限制的指標型別,或者說是指標的乙個子集,而從其功能上來看,似乎可以說引用是指標功能的一種高層實現。
關於運算子&和*:
在c++裡,沿襲c中的語法,有兩個一元運算子用於指標操作:&和*。按照本來的定義,&應當是取址符,*是指標符,也就是說, &用於返回變數的實際位址,*用於返回位址所指向的變數,他們應當互為逆運算。實際的情況也是如此。源引c++大學教程裡面的例子:
#include
<
iostream.h
>
intmain()
執行結果都會是相應的十六位位址。
然而,在c++的引用中,&被用來宣告引用,這裡&我個人認為不再是取址的作用,而只是乙個代號。
關於const
const名叫常量限定符,用來限定特定變數,以通知編譯器該變數是不可修改的。習慣性的使用const,可以避免在函式中對某些不應修改的變數造成可能的改動。
常量限定符與按值呼叫、按引用呼叫相結合,共有六種可能:
兩種按值傳遞引數:非常量資料和常量資料;
四種按引用呼叫傳遞引數:非常量資料的非常量指標,常量資料的非常量指標,非常量資料的常量指標,常量資料的常量指標。這四種傳遞方式,「非非」的訪問許可權是最高的,「常常」的最低。
這裡主要的是區分常量指標和常量資料。下面是分別兩者的定義:
const
char
*sptr;
//sptr is a pointer to the constant char variable
char
*const
ptr;
//ptr is a constant pointer to the (non-constant) char variable
最簡單的理解方式,我個人認為,主要是理解const的功能:鎖定它所修飾的變數的值,以便其不會被修改。所以,當const修飾指標時,指標是不可修改的(例如,const修飾乙個陣列名,這樣就不能使用對陣列名進行加減運算來移動陣列指標);當const修飾變數是,變數的值是不可修改的。其實,在這裡,我覺得指標和變數應當都看作是變數來處理。
實際的應用中,const結合儲存類、作用域的使用,下次再好好補上,這次時間太趕,先寫一些筆記出來,以免後邊忘記了。
ps: 強烈批判這個該死的微軟拼音!難道隨著版本的公升級,變得越來越傻了?看不出它跟了我這麼長時間,從我的輸入裡面學了什麼東西出來,每次還得自己手選……考慮是不是該學五筆了……
ps: ps: 我不知道其他的各位有沒有感覺,csdn的write blog功能裡面的後台應該是不是有什麼檢測程式(用js寫的輸入驗證一類的),每次輸入字元都會檢測,以至於有時候會出現假死的現象。準備下次在firefox裡面用js console看一下。動不動就像宕機一樣,很不爽的啊……
C 學習 常量 const限定符
const int bufsize 512 input bufsize bufsize 仍然是左值,但不可修改。任何修改bufsize的嘗試都會導致編譯錯誤。因為常量定義後就不可修改,所以定義時必須初始化。e.g.const std string i hello 正確 const i,j 0 錯誤,...
指標和const限定符
const int p 1,表示p指向乙個整型變數,並且該變數為const的。2,可以更改p的值,不可以更改它所指向物件的值。3,它可以指向非const型別的int變數 int const p 1,表示p指向乙個整型變數,該變數為非const的 2,不可以更改p的值,一旦初始化不可更改,單可以更改它...
指標和const限定符
1 指向const物件的指標 const double pi 3.14 double ptr error ptr is a plain pointer const double cptr ok cptr is a pointer to const 不能用void 指標儲存const物件的位址,而必須...