《c專家編程》筆記–深入理解const char*p,char const*p,char *const p

來源:互聯網
上載者:User

const char*, char const*, char*const的區別問題幾乎是C++面試中每次都會有的題目。 

事實上這個概念誰都有,只是三種聲明方式非常相似很容易記混。 
Bjarne在他的The C++ Programming Language裡面給出過一個助記的方法: 
把一個聲明從右向左讀。 

char * const cp; ( * 讀成 pointer to ) 
cp is a const pointer to char 

const char * p; 
p is a pointer to const char; 

char const * p; 
同上因為C++裡面沒有const*的運算子,所以const只能屬於前面的類型。 
C++標準規定,const關鍵字放在類型或變數名之前等價的。


關於char **p 、const char **p的類型相容性問題

    1。問題

        char *p1;const *p2=p1;//合法

        char **p1;const  char**p2=p1;//不合法,會有警告warning: initialization from incompatible pointer type

        char **p1;char const**p2=p1;//不合法,會有警告warning: initialization from incompatible pointer type

        char**p1;char*const*p2=p1;//合法

    2。判斷規則

        明確const修飾的對象!對於指標p1,和p2,若要使得p2=p1成立,則可讀做 

             “p1是指向X類型的指 針,p2是指向“帶有const限定”的X類型的指標 “。

        char *p1;const char *p2=p1;//合法:p1是指向(char)類型的指標,p2是指向“帶有const限定"的(char)類型的指標。

        char **p1;const  char**p2=p1;//不合法:p1是指向(char*)類型的指標,p2是指向 ((const char)*)類型的指標。

        char **p1;char const**p2=p1;//不合法;與上等價。

        char**p1;char*const*p2=p1;//合法:  p1是指向(char *)類型的指標,p2是指向“帶有const限定"的(char*)類型的指標。

最後上一個例子:

#include <stdio.h>int main(void){        int v1 = 1;        int v2 = 2;        int const *a = &v1;        *a = 2;        int *const b = &v2;        b = &v1;        char**p1;        char*const*p2=p1;        *p2 = &v1;        return 0;}

編譯時間出現如下錯誤:
const.c: In function 'main':
const.c:9: error: assignment of read-only location '*a'
const.c:12: error: assignment of read-only variable 'b'
const.c:16: error: assignment of read-only location '*p2'

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.