18 memset()函式賦值問題

2021-08-26 15:24:09 字數 889 閱讀 8833

這個函式多用於清空陣列,memset 用來對一段記憶體空間全部設定為某個字元,一般用在對定義的字串進行初始化為『 』或『/0』;

例:char a[100];memset(a, 『/0』, sizeof(a));

注意:

memset(a,1,sizeof(a))的值不是1,是乙個很大很大的數

原因:memset是按位元組賦值的,取變數a的後8位二進位制進行賦值。

1的二進位制是(00000000 00000000 00000000 00000001),取後8位(00000001),int型佔4個位元組,當初始化為1時,它把乙個int的每個位元組都設定為1,也就是0x01010101,二進位制是00000001 00000001 00000001 00000001,十進位制就是16843009。

之所以輸入0,-1時正確,純屬巧合。

0,二進位制是(00000000 00000000 00000000 00000000),取後8位(00000000),初始化後00000000 00000000 00000000 00000000結果是0

-1,負數在計算機中以補碼儲存,二進位制是(11111111 11111111 11111111 11111111),取後8位(11111111),則是11111111 11111111 11111111 11111111結果也是-1;

而對於字元來說,memset函式是將所指向的某一塊記憶體中的每個位元組的內容全部設定為指定的ascii值, 所以對於任何字元來說,memset都是可行的。

總結:可以用memset()來賦值0,-1,同時也可以賦值無窮大(一般用0x3f3f3f3f來表示無窮大,如果用99999999來表示無窮大的話,對於兩數相加有很大的問題)

memset(s,0x3f,sizeof(s))

也可用memset賦值任意字元;

memset 函式賦值陣列常用方法總結

一 對字元陣列賦初值 char data 100 memset data,0 sizeof data char data 10 10 memset data,sizeof data 二 對結構體賦初值 對結構體變數賦初值 對結構體陣列賦初值struct ststu 50 data void main...

memset函式賦初值問題

我的第一篇部落格。今天寫memset函式的時候遇到了老生常談的話題,這裡沒有出現意料中的1而是16843009。網上查詢了資料後,發現,memset函式是按位元組儲存。語法如下 而char大小是乙個位元組。memset函式其實又稱為char陣列初始化函式,在初始化時對從buffer指標處開始的連續s...

memset 函式初始化問題

話說剛開始使用memset的時候一直以為memset是對每乙個int賦值的,心裡想有了memset還要for迴圈對陣列進行初始化幹嘛。但其實memset這個函式的作用是將數字以單個位元組逐個拷貝的方式放到指定的記憶體中去 memset dp,0,sizeof dp int型別的變數一般占用4個位元組...