c++給數組整體賦初值


1.memset

memset是計算機中C/C++語言初始化函數。作用是將某一塊內存中的內容全部設置為指定的值, 這個函數通常為新申請的內存做初始化工作。

頭文件:

#include<cstring>

 

memset()函數原型extern void *memset(void *buffer, int c, int count)    buffer:為指針或是數組;   c:是賦給buffer的值;   count:是buffer的長度。

c的取值范圍應該在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)中改。

使用方法:memset函數按字節對內存塊進行初始化,所以不能用它將int數組初始化為0和-1之外的其他值(除非該值高字節和低字節相同)。

int q[100];

(1)賦值為-1

memset(q,-1,sizeof(q))和memset(q,255,sizeof(q))以及memset(q,0xff,sizeof(q));是等價的,都是給q數組賦值-1.

(2)賦值為0

memset(q,0,sizeof(q))

(3)賦其它值

memset(q,-127,sizeof(q));和memset(q,0x81,sizeof(q))是等價的,賦值后q[1]=-2122219135

原理:-127轉換成二進制為111111111(原碼),它的補碼10000001,填充int的4個字節為10000001 10000001 10000001 10000001,

而10000001 10000001 10000001 10000001的原碼為:11111110 01111110 01111110 01111111(最高位的1是符號位)

 

 2.fill

fill(q,q+3,5);//給q數組的q[0],q[1],q[2]賦值為5

頭文件:#include<algorithm>

格式:fill(初始位置first,最終位置last,值)      //填充范圍為[first,last)

 (備注:fill大家在競賽中使用較少,原因不詳,據說是速度太慢。)

(無關內容:long long在考試中如果使用printf輸出,則可以用LLd控制)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM