[英]What brackets in array input mean
為什么在某些動態數組聲明中,我們需要將數組名稱放在方括號中:
(*allocMat)[count++] = row;
它與運算符優先級有關,即,語句的哪一部分先執行。
就像簡單的數學一樣。 是x = a + b*c
像x = (a + b)*c
或x = 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.