const指標和指向const物件的指標

2021-06-02 06:49:55 字數 1597 閱讀 6766

1.有關const指標和指向const物件指標的一道題:

首先要說明的是怎麼來判斷const指標還是指向const的指標:

如果const後面跟的是型別,那麼const是用來修飾物件的,所以它是指向const物件的指標

但是如果const後面跟的是指標本身,那麼const是用來修飾指標的,所以它是const指標

可以這麼理解,const在*號左邊,那麼它修飾指向const物件的指標,但是const出現在*號右邊,那麼是const指標。

typedef string *pstring;

const pstring cstr;

請問cstr是什麼型別的?

按我之前的理解是將string *代替原先的pstring,最終得到的是const string *cstr;

那這樣來看的話,cstr是乙個指向const物件的指標。

但正確答案是:const是用來形容pstring的,而pstring是乙個指標型別,所以它應該是乙個const指標,等價於:string * const cstr

const指標是不能修改它的指向,而指向const物件的指標是不能修改指標所指向的內容

2.最近觀察到一種求解陣列大小的方法int a=(....); sizeof(a)/sizeof(*a)就是這個陣列的元素個數

這樣我們在使用陣列作為函式引數的時候,使用兩個引數,第乙個引數傳遞陣列的首個元素的位址,第二個引數傳遞陣列的大小。

3.靜態區域性變數只被初始化一次,從第一次被初始化到程式執行結束都是存在的,對定義它的函式體始終是可見的。靜態區域性變數可以用來在某個函式的多次呼叫之間傳遞引數。見如下的例子:

#includeusing namespace std;

int count()

int main()

{ for(int i=0;i<10;i++)

cout<4.類內定義的成員函式是內斂函式,所以我們不要將比較複雜的函式定義放在類內。

5.若沒有給內建型別(比如int)的全域性變數和靜態變數初始化,那麼系統預設的值是0...,但如果是區域性變數系統是不會對它進行初始化的。

6.看unp裡面的一句:typedef void sigfunc(int);我就再納悶這句話到底是什麼意思。後來翻看c++ primer 的指向函式的指標那一節才明白,sigfunc代表了一種返回值為void,形參為乙個int的函式型別。另外在typedef bool (*funcptr) (int,int);表示的是將funcptr定義為指向返回值為bool,有兩個int型的形參函式型別的指標。返回指向函式指標的函式:int(*ff(int))(int*,int);用上typedef才使得這個表示式容易理解:typedef int(*pf)(int*,int); pf ff(int);ff這個函式返回了乙個指向函式的指標。 到現在才對c++中的typedef有比較深入的了解,慚愧慚愧!!

7.指向const物件的指標是一種「自以為指向const物件的指標」:其實它可以指向const物件,也可以指向非const物件:

int deval=5;

const int * pdeval;

pdeval =&deval;

這是允許的。

所以這句論斷是錯誤的:指向const物件的指標所指的一定是const物件。(x)

指向const的指標和const指標

指向const的指標 int gorp 16 int chips 12 const int p snack gorp 其中p snack指向乙個const int。p snack 20 不被允許,p snack的值為const,禁止修改p snack指向的值,p snack chips 可以執行,p...

指向const物件指標 const指標

指向const物件指標 const指標 2010 07 22 16 40 1.指向const物件的指標 指向const物件的指標是乙個指標,但是不能通過它修改它指向的物件的值.宣告方法 const int p 指向const物件的指標在初始化後不允許對它指向的物件的值進行修改.const int i...

指向const物件指標 const指標

參見 110頁 陣列和指標 一節 指向const物件指標關鍵理解 const double cptr 指向const物件指標關鍵理解 可以指向非const物件,但不能通過該指標修改所指向物件的值,const指標關鍵理解 int const curerr errnumb const指標關鍵理解 cur...