2012-11-12 166 views
0

我很難理解下面的代碼buffer[i] = arr ? arr[i] : 0;。 這是否意味着如果arr包含任何東西,那麼它等於buffer[i],如果它不等於0賦值運算符和條件語句

#include <iostream> 
using namespace std; 
int main() 
{ 
    int arr[5]={11,22,33,44,55}; 
    int * buffer; 
    buffer = new int [5]; 

    for(int i=0;i<5;i++){ 
     buffer[i] = arr ? arr[i] : 0;//true/falls 
     cout<<buffer[i]<<","; 
    } 
    cout<<endl; 

    int arr2[5]={}; 
    int * buffer2; 
    buffer2 = new int [5]; 

    for(int i=0;i<5;i++){ 
     buffer2[i] = arr2 ? arr2[i] : 0;//true/falls 
     cout<<buffer2[i]<<","; 
    } 
    cout<<endl; 
} 

回答

9

看起來代碼可能已經從arr動態分配時移植過來。現在它在棧上,所以arr永遠不可能是NULL,所以檢查是無用的

+0

你是什麼意思代碼可能已被移植 –

+0

如果是int * arr = new int [5],檢查會有意義。 。 – James

+0

所以如果我加這個int * p = arr;它有道理 –