娓娓道來c指標 (6)const的使用

來源:互聯網
上載者:User

標籤:const   指標   結構體   

                             (6)const的使用

c中的const表達著“常量”的意思,更準確地說是“read-only”(唯讀)的含義。當const與指標相遇時,由於其與*的相對位置不同,會產生不一樣的效果。

舉例說明

(1)const位於*的左側

如,const int *p;此時等同於int const *p;

此時,const的含義體現在:*p是唯讀。

(1)const位於*的右側

如,int *const p;

此時,const的含義體現在:p是唯讀。

實驗驗證

int main(){int foo = 1;int bar = 2;const int *pa = &foo;int *const pb = &foo;//嘗試修改值*pa = 2;    //編譯器報錯:“表達時必須是可修改的左值”pb = &bar;  //編譯器報錯:“表達時必須是可修改的左值”return 0;}

此時,添加語句*pa=2;會報錯,因為*pa是唯讀,不可更改;pb=&bar;同樣會報錯,因為pb是唯讀,不可更改。


上面提到,const的本意是“唯讀”,而並非“常量”。通過一些方法,可以更改它的值。

int main(){const int foo = 1;printf("foo...%d\n", foo);int *pa = &foo;  //這裡有警告,但仍可運行*pa = 2;printf("foo...%d\n", foo);system("pause");return 0;}
運行



從結果看,成功更改了本已聲明為唯讀foo。這段代碼,在c中編譯只是有警告,在cpp下編譯直接出錯。不知還有沒有其它的方法,大家可推薦下。


const與結構體類型相遇,此時const會const到什麼程度?

typedef struct{char *name;char *address;int age;}Person;void setPerson(const Person* pPer){/*以下方式會出錯!pPer->name = "David";pPer->address = "BeiJing";pPer->age = 22;*/strcpy(pPer->name, sizeof("David"), "David");strcpy(pPer->address, sizeof("BeiJing"), "BeiJing");}int main(){Person per;char name[10] = "zx";char address[20] = "QiChun";per.name = name;per.address = address;per.age = 24;printf("per.name...%s\n", per.name);printf("per.address...%s\n", per.address);printf("per.age...%d\n", per.age);printf("update..\n");setPerson(&per);printf("per.name...%s\n", per.name);printf("per.address...%s\n", per.address);printf("per.age...%d\n", per.age);return 0;}
運行

編譯時間無任何警告,從運行結果看,const修飾符起到的作用是這樣的:


若直接初始化 per = { "zx", "QiChun" };則在setPerson()方法中,修改name和address所指向的內容也是不可以的。這裡的原因不是因為const,而是"zx"和"QiChun"都是常量字串。一般情況下,常量字串都位於記憶體中的唯讀地區,本身是不可修改的。故在代碼中,我們選擇申請棧空間。



專欄目錄:C指標


娓娓道來c指標 (6)const的使用

相關文章

聯繫我們

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