搜尋

首頁  >  問答  >  主體

c++ - char a[100] = {'\0'}与memset(a, 0, sizeof(a))有什么区别?

如题所 char a[100] = {'0'} 与 memset(a, 0, sizeof(a)) 什么区别?

天蓬老师天蓬老师2766 天前1459

全部回覆(7)我來回復

  • 大家讲道理

    大家讲道理2017-04-17 15:26:09

    char a[100] = {'0'};
    

    a[0]初始化成'0',將後續元素值初始化,即初始化成0,即'這裡有個槓0'。 (槓不出來)
    如果是

    char a[100] = {'杠0'}; // 大雾
    

    則第一個元素以'槓0'初始化,後續元素仍值初始化。

    memset(a, 0, sizeof(a))
    

    等價於

    for (int i=0; i<sizeof(a); ++i)
        ((char *)a)[i] = 0;

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:26:09

    雖然效果都是讓陣列a[]的內容置零了。但兩段程式碼用在完全不同的場合,不能互相取代:

    • char a[100] = {0}是對數組變數進行宣告和初始化。在此之前a[]還不存在。

    • memset(a, 0, sizeof(a))是在前面已經聲明a[]以後,對其內容進行清零操作。在此之前a[]已經存在了。

    還有就是memset是個函式庫函數,不是語言本身的能力。

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 15:26:09

    char a[100] = {'0'} 在編譯時即可確定內容,而memset要到運行時才會將內容設為指定值

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 15:26:09

    一個是用字元0(0x30)去填充a 另一個是用0 而且C99似乎會自動添加'0' memset不會 它的意義是將某地址的某區域填充為指定的內容

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 15:26:09

    char a[]得到的a可能在堆疊上, 可能是全域變數, 總之是存在的

    memset不導致分配, a可以在任何地方

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 15:26:09

    a[100] = {0}; 可以視為方便編碼的快速初始化變數記憶體的語法糖,僅在進入該作用域時執行一次,當然作用域可以重複進入就再次執行。
    memset是通用的設定memory的函數,任何時都可以呼叫。

    回覆
    0
  • PHPz

    PHPz2017-04-17 15:26:09

    char a[100] = {0} 是靜態初始化為0,在程式運行前對應的記憶體即為0
    memset() 是動態初始化為0,程式執行時將對應的記憶體清除於🎜>

    回覆
    0
  • 取消回覆