1
A
回答
7
if (!someArray[i])
表示如果someArray[i]
爲零(或可轉換爲false),則將執行if
塊內的代碼,否則將不會執行!
如果someArray[i]
是無法轉換爲布爾值,或者如果類型的someArray[i]
沒有定義操作!
返回布爾值(或可轉換爲它的值),那麼你的代碼將無法編譯。注:所有數字(int,float,double,char等)和任何類型的指針都可以轉換爲布爾值。
1
這意味着如果someArray [i]中的值被解釋爲false(零值或布爾值false),那麼代碼將進入if塊。
假定以下未編譯/未測試的代碼:
//we make an array with some chars, but have one as NULL (0)
char someArray[] = { 'a', 'b', 'c', 0, 'e' };
//we loop through the array using i as the index
for(int i = 0; i < 5; ++i)
{
if(!someArray[i]) //if this entry is null (0) or false, show an error:
{
printf("%d does not have a char!\n", i);
}
else //otherwise, print the contents
{
printf("%d is %c\n", i, someArray[i]);
}
}
預期輸出將是:
- 0是
- 1爲b
- 2爲C
- 3的確沒有字符!
- 4爲e
1
的!
(未)操作者將返回true
如果表達式的計算結果爲0,所以:
class SomeObject
{
}; // eo class SomeObject
std::vector<int> intVector;
std::vector<long> longVector;
std::vector<SomeObject*> objectVector;
intVector.push_back(1);
intVector.push_back(0);
longVector.push_back(4049);
longVector.push_back(0);
objectVector.push_back(new SomeObject);
objectVector.push_back(NULL); // or nullptr if you're on C++0x, or even just 0!
if(!intVector[0])
{
// false, intVector[0] is not zero.
}
if(!intVector[1])
{
// true! intVector[1] is zero
};
而對於其他兩個矢量相同的成立。順便提一下,!
運算符可以由類來超越以改變行爲。
還應該注意,這是從C#這要求表達是布爾類型的不同:
int i = 0;
if(!i) { /* compile error in C# */ }
if(i == 0) { /* ok in C# */ }
bool b = false;
if(!b) { /* ok in C# */ }
if(!(i == 0)) { /* also ok */ }
2
在C中,它是等效於寫入
if (someArray[i] == 0)
從C語言標準(n1256):
6.5.3.3一元算術o perators
約束
1一元+
或-
操作者的操作數應具有算術類型;~
運算符,整數類型;標量類型的運算符!
。
語義
...
5的邏輯否定運算!
的結果是0,如果它的操作數的值不相等的比較爲0,1,如果其操作數的值進行比較等於0。結果有型號int
。表達式!E
相當於(0==E)
。
正如Kos和John Dibling指出的那樣,C++的情況是不同的。從最新的C++草案(n1905)
5.3.1元運算符
...
8的邏輯否定運算符的操作!隱含轉換爲bool
(第4條);如果轉換後的操作數是false
和false
,則其值爲true
。結果的類型是bool
。
0
或許在聲明if (!someArray[i])
中知道的重要事項是運營商的優先權。
第一[評估,然後!被評估。
寫它在一個較長的形式可能是
sometype a = someArray[i];
if(!a)
相關問題
- 1. python中的somearray [i] .var()的用法
- 2. if(in_array(<title>,$ SomeArray))返回true
- 3. SomeArray的差異[]和someArray。@ each
- 4. 的sizeof someStruct->的someArray [i] [j]總是返回4
- 5. $ .when.apply($,someArray)做什麼?
- 6. TypeScript SomeArray []'不可分配給類型'Observable <SomeArray[]>'
- 7. int * p = somearray但(p + 1)不等於somearray的地址[1]。爲什麼?
- 8. Awk for i in range NF,if $ i〜/ pattern/print $ i
- 9. if [「$ { - #* i}」!=「$ - 」]是什麼意思?
- 10. if($ bans [$ i] ['ip'] == $ _SERVER ['REMOTE_ADDR'])
- 11. 如何:* .csv - > line - > someArray - >修改
- 12. 數組問題(if(zeds [i] .x == zeds [i] .x))
- 13. if(i ++)條件如何工作?
- 14. 問題比較計數($的someArray)爲零
- 15. 「İ」.toLowerCase()!=「i」
- 16. Increment ++ i,i ++和i + = 1
- 17. i(i == -i && i!= 0)的值在Java中返回true
- 18. 將v模型設置爲數組中的鍵(v-model.key =「someArray」)
- 19. 當if語句爲真時返回「i」值
- 20. 返回if()裏面的for()是否返回if()或for()?
- 21. 錯誤if(!n.cat [i]){:參數的長度爲零
- 22. 什麼評估if(1&$ i)for for循環
- 23. if(id == 1)printf(「%i」,id)打印一些隨機值
- 24. 將'else'與I/O結合使用,看到';' 'if'
- 25. if(TreeView.Nodes [i] == null)拋出空指針異常
- 26. if($ i ???函數如何查找顯示AABB的傳送帶AABB
- 27. 意義的I(I())
- 28. 編譯表達式++ i ++ ++ i ++ ++ i?
- 29. 爲什麼i = i + 1比i ++快?
- 30. 哪個更快:i = i + 2或i + = 2?
什麼的的someArray的類型?指針? – Rup 2011-01-06 15:51:31
@John好的,但是如果它是一個空指針檢查(就像我期望的那樣),那麼我們可以給他一個以指針爲中心的答案,這可能對他更有用。 – Rup 2011-01-06 16:20:55
@John:someArray可以是運算符重載的對象數組,所以它很重要。 – 2011-01-06 16:40:38