memset(dp,0,sizeof(dp));
int 型別的變數一般占用4個位元組,對每乙個位元組賦值0的話就變成了「00000000 00000000 000000000 00000000」 (即10進製數中的0)
賦值為-1的話,放的是 「11111111 11111111 11111111 11111111 」(十進位制的-1)
memset(dp,1,sizeof(dp));
這樣你可能以為如果你賦值1的話會讓整個dp陣列裡的每乙個int變成1,其實不然。
以上**執行後,dp陣列的內容為 00000001 00000001 00000001 00000001 轉化為十進位制後不為1
我們在很多程式中都會看到memset(a,127,sizeof(a));這樣的**,127是什麼特別的數字呢?通過基礎的進製轉換可以得知127的二進位制表示是01111111,那麼在dp陣列裡放的內容就是「01111111 01111111 01111111 01111111」,(10進製的2139062143)
這樣就實現了將陣列裡的全部元素初始化為乙個很大的數的目的了,在最短路徑問題以及其他很多演算法中都是需要用到的。
值得注意的是,int型別的範圍為2^31-1 (2147483647),所以初始化int型別的陣列也可以使用127這個數值。
如果是128呢?因為128的二進位制是10000000,那麼放的內容就是10000000 10000000 10000000 10000000,經過計算可得這個數是-2139062144。這樣就可以將陣列初始化為乙個很小的數了。
C memset函式解析
memset函式是計算機中c c 語言初始化函式,將s所指向的某一塊記憶體中的後n個位元組的內容全部設定為ch指定的ascii值,第乙個值為指定的記憶體位址,塊的大小由第三個引數指定,這個函式通常為新申請的記憶體做初始化工作,返回值為s。需要的標頭檔案 在c中 在c 中 void memset vo...
C memset 函式和bzero 函式
2 類物件使用memset應注意的問題 3 bzero 函式簡介 memset 的函式,它可以一位元組一位元組地把整個陣列設定為乙個指定的值。它把陣列的起始位址作為其第乙個引數,第二個引數是設定陣列每個位元組的值,第三個引數是陣列的長度 位元組數,不是元素個數 memcpy用來做記憶體拷貝,你可以拿...
C memset函式用法理解
void memset void ptr,int value,size t num 函式解釋 將ptr中當前位置後面的num個位元組 用 value 替換並返回 ptr 理解memset的填充方式為按位元組 byte 填充。memset會擷取value的最後乙個byte填入到ptr的每乙個位元組中。...