c++ - char a[100] = {'\0'}与memset(a, 0, sizeof(a))有什么区别?
天蓬老师
天蓬老师 2017-04-17 15:24:09
0
7
1475

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

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(7)
大家讲道理
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;
大家讲道理

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

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

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

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

巴扎黑

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

小葫芦

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

洪涛

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

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

Peter_Zhu

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

PHPzhong

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板