C++ memset用法

來源:互聯網
上載者:User

標籤:memset   ret   記憶體   操作   mem   pre   for   相同   管理   

memset函數存在於C/C++的標頭檔<cstring>中,其作用(一般)是用來將數組初始化。(尤其是當一個數組已經用過了(劃掉))

格式:

  memset(void *s,int ch,size_t n);
函數解釋:將s中當前位置後面的n個位元組 (typedef unsigned int size_t )用 ch 替換並返回 s 。
memset:作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或者數組進行清零操作的一種最快方法。
                                             ——來自百度百科
相信這一段話誰都看得懂。為了方便理解給出執行個體:
1 #include <cstdio>2 #include <cstring>3 4 int main() {5     int a[10];6     memset(a,0,sizeof(a));7     for (int i=1;i<=9;i++) printf("%d",a[i]);8     return 0;9 }

運行程式,你會看到一行可愛的0排好隊站在你面前。

 

然而當我在刷(水)題的時候,為了懶得寫for迴圈我直接使用memset來把一個數組全部初始化為1 ,就像這樣:

memset(enode,1,sizeof(enode));

那一天使我回想起被WA支配的恐懼,直到我在調試的時候發現enode在memset操作以後長這樣:

 

為什麼呢?

 

原來,memset函數按位元組對記憶體塊進行初始化,所以不能用它將int數組初始化為0和-1之外的其他值(除非該值高位元組和低位元組相同)。(——來自百度百科)

 

至於memset對於涉及指標的記憶體管理,那就不是我們地球人搞得懂的範疇了——甚至指標本身就不是給人用的。

來跟我一起念:不摸指標RP++!!

 

C++ memset用法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.