第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

typedef指針const怪異

typedef指針const怪異

C
慕妹3242003 2019-10-11 14:48:58
請(qǐng)考慮以下代碼:typedef struct Person* PersonRef;struct Person {  int age;};const PersonRef person = NULL;void changePerson(PersonRef newPerson) {  person = newPerson;}由于某種原因,編譯器抱怨只讀值不可分配。但是const關(guān)鍵字不應(yīng)使指針為const。有任何想法嗎?
查看完整描述

3 回答

?
MM們

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊

注意


typedef int* intptr;

const intptr x;

與以下內(nèi)容不同:


const int* x;

intptr是指向int的指針。const intptr是指向常量的指針int,而不是指向常量的指針int。


所以,在typedef指針之后,我不能再將其常量化為內(nèi)容了嗎?


有一些丑陋的方法,例如gcc的typeof宏:


typedef int* intptr;

intptr dummy;

const typeof(*dummy) *x;

但是,如您所見,知道后面的類型是沒有意義的intptr。


查看完整回答
反對(duì) 回復(fù) 2019-10-11
?
BIG陽(yáng)

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊

雖然以上答案已經(jīng)解決了問題,但我確實(shí)想念為什么...


因此,也許是一個(gè)經(jīng)驗(yàn)法則:


將const總是指它的前身令牌。

如果沒有這種情況,它是“ consting”它是后繼令牌。

該規(guī)則確實(shí)可以幫助您聲明一個(gè)指向const指針的指針或類似的東西。


無論如何,考慮到這一點(diǎn),應(yīng)該弄清楚為什么


struct Person *const person = NULL;

聲明一個(gè)指向可變結(jié)構(gòu)的const指針。


考慮一下,您的typedef 使用指針標(biāo)記將“分組”。所以,寫struct Person*


const PersonRef person = NULL;

您的編譯器會(huì)看到以下內(nèi)容(偽代碼):


const [struct Person *]person = NULL;

由于的內(nèi)容已不const剩,因此它將令牌標(biāo)記為正確的struct Person *常量。


好吧,我認(rèn)為,這就是為什么我不喜歡使用typedef隱藏指針的原因,而我確實(shí)喜歡typedef。那寫作呢


typedef struct Person { ... } Person;

const Person *person; /*< const person */

Person *const pointer; /*< const pointer to mutable person */

對(duì)于編譯器和人員來說,您應(yīng)該做什么很清楚。


查看完整回答
反對(duì) 回復(fù) 2019-10-11
?
開心每一天1111

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊

永遠(yuǎn)不要將指針隱藏在typedef后面,這確實(shí)是一種糟糕的做法,只會(huì)造成bug。


此類臭名昭著的錯(cuò)誤是,聲明為const的typedef:ed指針類型將被視為“指向非常量數(shù)據(jù)的常量指針”,而不是“直觀地希望指向常量數(shù)據(jù)的非常量指針”。 。這就是程序中發(fā)生的情況。


解:


typedef struct

{

  int age;

} Person;


const Person* person = NULL; // non-constant pointer to constant Person


查看完整回答
反對(duì) 回復(fù) 2019-10-11
  • 3 回答
  • 0 關(guān)注
  • 521 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)