中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
詳解const int *p,int*const p,int const *p
1 從const int n 說起
    const int n=20,有了const修飾的n 我們不稱它為變量,而稱符號常量,代表著20這個數(shù)。這就是const 的作用。n是不能在它處重新賦新值了。
     認識了const 作用之后,另外,我們還要知道格式的寫法。有兩種:const int n=20;與int const n=20;。它們是完全相同的。這一點我們是要清楚??傊?,你務(wù)必要記住const 與int哪個寫前都不影響語義。有了這個概念后,我們來看這兩個家伙:const int * pi與int const * pi ,按你的邏輯看,它們的語義有不同嗎?呵呵,你只要記住一點,int 與const 哪個放前哪個放后都是一樣的,就好比const int n;與int const n;一樣。也就是說,它們是相同的。

2 const int * pi的語義
     我先來說說const int * pi是什么作用。看下面的例子:
int n1=30;
int n2=40;
const int * pi=&n1;
pi=&n2;     //注意這里,pi可以在任意時候重新賦值一個新內(nèi)存地址
n2=80;      //想想看:這里能用*pi=80;來代替嗎?當(dāng)然不能
printf( “%d”, *pi ) ;   //輸出是80
語義分析:
     看出來了沒有啊,pi的值是可以被修改的。即它可以重新指向另一個地址的,但是,不能通過*pi來修改n2的值。這個規(guī)則符合我們前面所講的邏輯嗎?當(dāng)然符合了!
     首先const  修飾的是整個*pi(注意,我寫的是*pi而不是pi)。所以*pi是常量,是不能被賦值的(雖然pi所指的n2是變量,不是常量)。
     其次,pi前并沒有用const 修飾,所以pi是指針變量,能被賦值重新指向另一內(nèi)存地址的。你可能會疑問:那我又如何用const 來修飾pi呢?其實,你注意到int * const pi中const 的位置就大概可以明白了。請記住,通過格式看語義。

3 再看int * const pi
     確實,int * const pi與前面的int const * pi會很容易給混淆的。注意:前面一句的const 是寫在pi前和*號后的,而不是寫在*pi前的。很顯然,它是修飾限定pi的。我先讓你看例子:
int n1=30;
int n2=40;
int * const pi=&n1;
//pi=&n2;     注意這里,pi不能再這樣重新賦值了,即不能再指向另一個新地址。
n2=80;     //這里能用*pi=80;來代替嗎?可以,這里可以通過*pi修改n1的值。
              //請自行與前面一個例子比較。
printf( “%d”, *pi ) ;   //輸出是80
語義分析:
     看了這段代碼,你明白了什么?有沒有發(fā)現(xiàn)pi值是不能重新賦值修改了。它只能永遠指向初始化時的內(nèi)存地址了。相反,這次你可以通過*pi來修改n1的值了。與前一個例子對照一下吧!看以下的兩點分析
     1). pi因為有了const 的修飾,所以只是一個指針常量:也就是說pi值是不可修改的(即pi不可以重新指向n2這個變量了)。
     2). 整個*pi的前面沒有const 的修飾。也就是說,*pi是變量而不是常量,所以我們可以通過*pi來修改它所指內(nèi)存n1的值。
     總之一句話,這次的pi是一個指向int變量類型數(shù)據(jù)的指針常量。
最后總結(jié)兩句:
     1).如果const 修飾在*pi前則不能改的是*pi而不是指pi。
     2).如果const 是直接寫在pi前則pi不能改。

4.補充三種情況。
     這里,我再補充以下三種情況。其實只要上面的語義搞清楚了,這三種情況也就已經(jīng)被包含了。不過作為三種具體的形式,我還是簡單提一下吧!
情況一:int * pi指針指向const int n常量的情況
const int n1=40;
int *pi;
pi=&n1;//這樣可以嗎?不行,VC下是編譯錯。const int 類型的n1的地址是不能
         //賦值給指向int 類型地址的指針pi的。否則pi豈不是能修改n1的值了嗎!
pi=(int* ) &n1;  // 這樣可以嗎?強制類型轉(zhuǎn)換可是C所支持的。
  //VC下編譯通過,但是仍不能通過*pi=80來修改n1的值。去試試吧!看看具體的怎樣。
情況二:const int * pi指針指向const int n1的情況
const int n1=40;
const int * pi;
pi=&n1;//兩個類型相同,可以這樣賦值。n1的值無論是通過pi還是n1都不能修改的。
情況三:用const int * const pi申明的指針
int n;
const int * const pi=&n;
//你能想象pi能夠作什么操作嗎?pi值不能改,也不能通過pi修改n的值。因為不管是
//*pi還是pi都是const的。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
關(guān)于C/C++中的const的用法的總結(jié)(三)
const int *p,const * int p,int const *p
講解C語言編程中指針賦值的入門實例
C語言之const常量(摘自C和指針)
const 指針與指向const的指針
C語言的那些小秘密之const修飾符
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服