一些函式使用上的問題

2022-09-18 23:27:15 字數 1297 閱讀 3525

編輯

播報void *memset(void *s, int ch, size_t n);

函式解釋:將s中當前位置後面的n個位元組 (typedef unsigned int size_t )用 ch 替換並返回 s 。

memset:作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法[1]  。

memset()函式原型是extern void *memset(void *buffer, int c, int count) buffer:為指標或是陣列,c:是賦給buffer的值,count:是buffer的長度.

編輯播報

第一:memset函式按位元組對記憶體塊進行初始化,所以不能用它將int陣列初始化為0和-1之外的其他值(除非該值高位元組和低位元組相同)。

第二:memset(void *s, int ch,size_t n);中ch實際範圍應該在0~~255,因為該函式只能取ch的後八位賦值給你所輸入的範圍的每個位元組,比如int a[5]賦值memset(a,-1,sizeof(int )*5)與memset(a,511,sizeof(int )*5) 所賦值的結果是一樣的都為-1;因為-1的二進位製碼為(11111111 11111111 11111111 11111111)而511的二進位製碼為(00000000 00000000 00000001 11111111)後八位都為(11111111),所以陣列中每個位元組,如a[0]含四個位元組都被賦值為(11111111),其結果為a[0](11111111 11111111 11111111 11111111),即a[0]=-1,因此無論ch多大只有後八位二進位制有效,而後八位二進位制的範圍在(0~255)中改。而對字元陣列操作時則取後八位賦值給字元陣列,其八位值作為ascii碼。

用memset 可以快速初始成最大數:

圖論中的memset和0x3f

寫此部落格的背景

相信有很多同學在看別人圖論專題的題解、板子的時候經常看到下面兩句:

const int inf = 0x3f3f3f3f;

memset(d, inf, sizeof(d));12

或者下面這樣:

memset(d, 0x3f, sizeof(d));

1很多同學都不明所以,只知道是將d陣列中的所有元素初始化成inf,但是至於為什麼選用0x3f3f3f3f和函式memset的原理都不清楚,看到別人這樣用,自己也這樣用,不清楚為什麼,於是前幾天同學來問我的時候,就出現了以下wa的**片段:

const int inf = 1e5;

// ...

memset(d, inf, sizeof(d));12

3以及:

一些有可能用上的python內建函式

內建函式 all 傳入乙個可迭代物件,對所有元素進行bool判斷,有乙個是fales返回fales 如果可迭代物件是空,則返回true any 可迭代物件為空返回fales,傳入乙個可迭代物件,任何乙個為true則返回true abs 絕對值運算 bin 傳入乙個數生成乙個二進位制數 hex 傳入乙...

MySQL一些函式的使用

1.lpad 函式的使用 2.substr str from pos for len 函式的使用,str表示要擷取的字串,pos表示從第幾位開始擷取 從1開始 len表示擷取幾位。如果在擷取的時候不寫需要擷取幾位 len 那麼就會從輸入的pos位開始一直擷取到最後。日期擷取 substr str t...

mybatis的一些函式使用

case when user.null then user.返回的資料 when user.is null then 男 返回的資料 else user.end 列名 自己定義同別名 這是拼接列的資料 distinct 是去重複 select group concat distinct name f...