如何理解 C 中 int i 的宣告方式?

時間 2021-06-02 09:09:45

1樓:

我的偏好,當定義指標型別物件的時候,比如你的例子,我寫成int* a,理由,為了統一,好記,int*是型別名,a是變數名. 指標是復合型別,不同型別復合出的指標型別型別不同。

2樓:Shark

個人偏好把int*看做乙個整體,把i作為變數,實際上這也符合從右向左看的原則。

至於int *i的寫法,我認為可以理解為*i代表乙個整形。反正我不喜歡這樣。

3樓:Hanson

int *i沒問題。

很好想,*的作用就是獲取以i的值為起始位址的一串資料。那麼究竟要從i往後讀幾個位元組,就要靠前面的int來定義。

連起來,int *i意思就是指標i指向的變/常量為int型。也就是說,int定義的是*i這個整體(也就是i所指的變數),理所當然是右結合。(當然,事實上你想怎麼結合都行,因為編譯器處理出來都是一樣的~)

另:有答主說這是語言缺陷,我不敢苟同。畢竟這個邏輯還是很清晰的。

4樓:Xi Yang

這顯然是語言設計的問題。

因為當初設計C語言的時候,那幫人腦抽,認為應當讓 "*a" 的表現和int一樣,以達到「最小驚訝」原則。所以就讓 "int * a, b" 表現得像 "int *a" 和 "int b" 一樣。

事實證明,大部分人的腦子都跟他們長得不一樣。

5樓:冒泡

事實上,c標準並不認為指標是個「型別」

c解析變數宣告是倒推的方法,int *a是說*a是int,所以推出a是int指標

再如複雜點的 int (*a[5])()

首先(*a[5])()這個表示式是int,於是*a[5]是個函式,於是a[5]是個函式指標,a就是個函式指標陣列了,若改成這樣的語法是不是更明確,把型別寫在左邊:

int()*[5] a

c語言定義變數的語法邏輯上是自洽的,只是採用倒推的方式,看起來不那麼直觀,所以*還是和i挨著好,如:

int *i,j

這是說*i和j是int,而若*挨著int,看上去就是i和j都是int*,容易誤解

6樓:徐欣

可以寫成 int *i ;

也可以寫成int* i ;

還可以寫成 int * i,對於編譯器沒有區別。

但是實際上為了便於閱讀和風格統一,我都是寫成 int* i ,畢竟i作為變數名前面加個*有不倫不類的感覺。

7樓:phisiart

int*i

;這種寫法的意思是:*i(i 解引用後)是乙個 int,所以 i 是乙個指向 int 的指標。

inta[3

];這種寫法的意思是:a[...] 是乙個 int,所以 a 是乙個 int 陣列。

int*a[

3];這種寫法的意思是:*a[...] 是乙個 int,所以 a 是乙個陣列,其中的元素是指向 int 的指標。

注意由於 的優先順序高於 *,所以 *a[...] 的意思是 *(a[...]) 而不是 (*a)[...]。

C C 中如何理解 int i 5

嵌入式Linux int i 5 i 這個我覺得大家應該沒有不知道的,這個是乙個指標,這個指標指向於乙個沒有引數的函式。但是函式需要返回值 現在就是要確定函式的返回值 i 把這一坨替換成Y int Y 5 可以看出函式的返回值是乙個陣列,這個陣列裡面的值是 5個指標 但是C語言函式可以返回陣列嗎?我...

怎麼理解C語言的複雜宣告?

char X X是乙個函式,返回值是乙個指標,該指標指向乙個陣列,陣列裡的元素是函式指標,這些函式指標所指向的函式的返回值是char型別。char X 3 5 X是乙個3個元素的陣列,陣列裡的元素是函式指標,這些函式指標所指向的函式的返回值也是指標,該指標指向乙個有5個char型別元素的陣列。 Be...

C 中宣告 const 乙個指標到底宣告的是什麼?

二圈妹 要知道指向常量的指標 pointer to const 和常量指標 const pointer 的區別 僅僅要求這個指標指向常量,我們可以修改指標的指向,甚至可以讓它指向相應的非常量資料型別 常量指標是指向的位置不變,它不一定需要指向常量。更詳細的 二圈妹 const 搭配指標和引用 C P...