我在面試中遇到過這樣的問題。 此代碼似乎很簡單:奇怪的c指針問題
long a = 1234;
long &b = a;
對於我來說,A和B是相同的東西。 但我問其中4以下的表達是同樣的事情
const *long c = &a;
const long *d = &a;
const * long e = &a;
long *const f = &a;
老實說,我不明白其中的4是等價的。
我在面試中遇到過這樣的問題。 此代碼似乎很簡單:奇怪的c指針問題
long a = 1234;
long &b = a;
對於我來說,A和B是相同的東西。 但我問其中4以下的表達是同樣的事情
const *long c = &a;
const long *d = &a;
const * long e = &a;
long *const f = &a;
老實說,我不明白其中的4是等價的。
這裏的事情是,引用不能被分配指向一旦初始化的另一個對象。所以最接近指針的類比將是一個指向非常量對象的常量指針。因此,你只需要找到相匹配的表達式:
const *long c = &a; // invalid syntax
const long *d = &a; // non-const pointer to const long
const * long e = &a; // invalid syntax
long *const f = &a; // const pointer to no-const long
讓我們來看看這些代碼:
long a = 1234; // you declare variable and initialize with 1234 value
long &b = a; // you declare another variable that points to the same address as a
在這種情況下,如果你同時打印,你會看到兩個具有相同的地址和值:
a = 555;
printf("%d, %d, %d, %d\n", a, &a, b, &b); \\ a and b are 555
但你不能改變地址b(也是)。考慮到所有上述因素,你可以假設第四個選項是正確的答案,因爲你也不能改變這個指針的地址。
long *const f = &a;
我認爲你們所有人忘記提及C聲明的原則:除非它被括號包圍,否則你應該從右到左閱讀它。
const *long c // c is a long of const pointer, wtf?
const long * d // d is a pointer to a const long, good
const * long e // space doesn't matter in C
long * const f // f is a const pointer to long, good
兩個指針定義無效。因爲它們都是錯誤的,所以( –
(1)和(3)是相同的東西:) :) –
它們都不是'同一件事',但第四種選擇是創建一個指針,指向'a'的地址,因爲它是一個常量指針,它不能改變指向任何其他地址,所以我猜這是一樣的東西,即使獲得值,你將不得不解除引用'f',而你不必這樣做'b'。 – LordWilmore