【轉】const int *p和int * const p的區別(常量指標與指向常量的指標)

來源:互聯網
上載者:User

標籤:

【轉】xwdreamer   出處:http://www.cnblogs.com/xwdreamer

 

 

對於指標和常量,有以下三種形式都是正確的:

const char * myPtr = &char_A;//指向常量的指標char * const myPtr = &char_A;//常量的指標const char * const myPtr = &char_A;//指向常量的常量指標

下面依次對這三種類型進行介紹。

因為*操作符是左操作符,左操作符的優先順序是從右至左,對於

1.常量指標(Constant Pointers)
int * const p

先看const再看* ,是p是一個常量類型的指標,不能修改這個指標的指向,但是這個指標所指向的地址上儲存的值可以修改。

執行個體1:
#include<iostream>#include<stdlib.h>using namespace std;void main(){    int i1=30;    int i2=40;    int * const pi=&i1;//這裡的pi指標式常量。    //pi=&i2;     //注意這裡,pi不能再這樣重新賦值了,即不能再指向另一個新地址。所以我已經注釋了它。    printf("%d\n", *pi ) ;   //輸出是30    i1=80;     //5.想想看:這裡能用*pi=80;來代替嗎?可以,這裡可以通過*pi修改i1的值。    printf("%d\n", *pi ) ;   //輸出是80    system("pause");}

 

執行個體2:
char char_A = ‘A‘;char char_B = ‘B‘; char * const myPtr = &char_A;myPtr = &char_B;    // error - can‘t change address of myPtr

 

2.指向常量的指標(Pointers to Constants)
const int *p

先看*再看const,定義一個指標指向一個常量,不能通過指標來修改這個指標指向的值。

執行個體3:
#include<iostream>#include<stdlib.h>using namespace std;void main(){    int i1=30;    int i2=40;    const int * pi=&i1;    printf("%d\n", *pi ) ;   //輸出是30    pi=&i2;     //注意這裡,pi可以在任意時候重新賦值一個新記憶體位址    i2=80;     //想想看:這裡能用*pi=80;來代替嗎?當然不能    printf("%d\n", *pi ) ;   //輸出是80    system("pause");}
執行個體4:
char char_A = ‘A‘;const char * myPtr = &char_A;*myPtr = ‘J‘;    // error - can‘t change value of *myPtr

 所以指標p所指向的整型數是一個常量,其值不能被修改。

 3.指向常量的常量指標

對於“指向常量的常量指標”,就必須同時滿足上述1和2中的內容,既不可以修改指標的值,也不可以修改指標指向的值。

4.引入字元數組和字元指標

字元數組和字元指標的定義如下:

char a[] = "I Love You!"; //定義了一個字元數組char *p = "I Love You!";  //定義了一個字元指標

可以將a理解為常量指標,而p為指向常量的指標,代碼執行個體如下:

#include<iostream>#include<stdlib.h>using namespace std;void main(){    char a[] = "I Love You!"; //定義了一個字元數組,數組名a是一個常量指標,指向的位置不變,都是數組第一個元素的位置    char *p = "I Love You!";  //定義了一個字元指標,指標p指向一個字串常量,這個字串常量不能修改    //*(p+1)=‘a‘;//錯誤,不可以修改指標指向的值,所以這裡注釋掉。    a[1]=‘a‘;//常量指標,不能修改指標的值,但是可以修改指標所指向的值。    //a=p;//錯誤,a是常量指標,不可修改其值。    cout<<a<<endl;    cout<<p<<endl;    cout<<a[1]<<endl;    cout<<*(p+2)<<endl;    system("pause");}

 

輸出值為:

IaLove You!
I Love You!
a
L

 

【轉】const int *p和int * const p的區別(常量指標與指向常量的指標)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.