簡體   English   中英

數組輸入中的括號是什么意思

[英]What brackets in array input mean

為什么在某些動態數組聲明中,我們需要將數組名稱放在方括號中:

(*allocMat)[count++] = row;

它與運算符優先級有關,即,語句的哪一部分先執行。

就像簡單的數學一樣。 x = a + b*cx = (a + b)*cx = a + (b*c)嗎?

因此,對於您的代碼,問題是: *是否比[][]或相反?

考慮只做:

*allocMat[count++] = row;

您希望如何執行?

像一個:

(*allocMat)[count++] = row;

或像B:

*(allocMat[count++]) = row;

答案是它像B一樣執行,因此,如果您真的想要A,則需要顯式添加括號。

allocMat是指向數組的指針時,您需要A的示例。

allocMat是一個指針數組時,您想要B的示例。

這是因為運算符優先級 數組下標運算符[]優先級高於一元解引用運算符* 因此,除非使用括號,否則類似

*allocMat[count++] = row;

將被解析為

* (allocMat[count++]) = row;

這是不希望的。

為了正確地評估該語句,我們需要首先取消引用指針,然后再對其進行索引,例如

(*allocMat)[count++] = row;

在上面的代碼片段中, allocMat是指向數組的指針。 因此,除非對較高的優先級強制取消引用,否則將首先考慮具有較高優先級的下標運算符[] ,這將導致錯誤的評估。

Allocmat大概是指向數組的指針。

需要括號才能正確獲取間接地址。 因此(*allocMat)[count++]allocMat[0][count++] 如果您省略括號, *allocMat[count++]將等於allocMat[count++][0] ,這是完全不同的。 這是因為運算符優先級- []綁定比*綁定更緊密。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM