因此,這裏是一個鍛鍊和,給出以下解決方案:瞭解指針和地址引用用C
假設下面的聲明已經做出:
char c = ‘A’;
char *p = &c;
char **p2 = &p;
void *v = &p2;
檢查每個以下表達式。如果該表達式是非法的,寫入ILLEGAL。如果表達式是合法的,請寫下它的類型(即int,void *等)
&p2 : char***
*p2: char*
&v: char****
p2 + 1: char**
v[0]: Illegal
您能解釋我們如何得到這樣的類型嗎?我知道v [0]是非法的,因爲v指向地址,我們不能像使用數組那樣使用括號表示來訪問它。 但所有其他讓我有點困惑,尤其是1-3。
我很樂意幫忙!
>我們不能使用括號表示來訪問 - 爲什麼不呢? v [0] == *(v + 0)。 – someuser 2014-10-30 04:02:12
實際上,'v [0]'是不合法的,因爲'v'是一個指向'void'的指針,並且'void'的指針可能不會被解引用。要引用K&R,「無效對象的(不存在)值可能不會以任何方式使用......」 – user3386109 2014-10-30 04:04:46
@ user3386109,通常我們可以使用這個表示法來訪問 - 這就是我想說的。 – someuser 2014-10-30 04:07:00