2012-10-30 113 views
3

有沒有辦法讓我獲取內存地址,並將其存儲在變量中的某個數量?那個變量類型必須是什麼?C++內存地址增量

例如,在下面的代碼中,我想先查看數據+ 0,然後查看數據+發送後的每個步驟。如果我正確地看這個,發送被存儲爲字節,數據是一個內存地址。

bool sendAll(int socket, const void *data, ssize_t size) { 
    ssize_t sent = 0; 
    ssize_t just_sent; 
    while (sent < size) { 
     just_sent = send(socket, data + sent, size - sent, 0); 
     if (just_sent < 0) { 
      return false; 
     } 
     sent += just_sent; 
    } 
    return true; 
} 

回答

3

這就是char*會做的。當指針的類型爲T*時,指針數學總是以sizeof (T)的增量運行。和sizeof (char) == 1的定義。

所以嘗試:「只需更換一個排隊叫號,在我的答案版本發送」

just_sent = send(socket, sent + (const char*)data, size - sent, 0); 
+0

我上面的代碼不起作用。我會做什麼來改變它的工作?此外,此處使用的數據數組是以(void *)數據形式發送的int數組。 –

+0

@Rick_Sch:只需將我的答案中的版本替換爲調用'send'的一行即可。 –

+0

你是上帝。認真。你剛剛幫我找出了需要幾天才能完成的事情。 –

2

只是補充@本的答案,因爲我認爲,是不是一個很好的答案...

@Rick,什麼是重要的是,你知道有多少字節傳輸。無論如果數組是整數數組,如果你想從sent字節你可以投data(char*)所以編譯器做了正確的指針運算上(char*)data + sent添加sent字節data開始。那是因爲sizeof(char) == 1字節。相反,如果您將data轉換爲(int*),而不是轉換sent字節,則需要轉換sent * sizeof(int)字節。

+2

這是一條評論,不是答案。我的答案確實(並且)解釋了'char *'上的指針運算以'sizeof(char)== 1'爲單位進行工作。 –