如题所 char a[100] = {'0'} 与 memset(a, 0, sizeof(a)) 什么区别?
大家讲道理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;
大家讲道理2017-04-17 15:26:09
雖然效果都是讓陣列a[]
的內容置零了。但兩段程式碼用在完全不同的場合,不能互相取代:
char a[100] = {0}
是對數組變數進行宣告和初始化。在此之前a[]
還不存在。
memset(a, 0, sizeof(a))
是在前面已經聲明a[]
以後,對其內容進行清零操作。在此之前a[]
已經存在了。
還有就是memset
是個函式庫函數,不是語言本身的能力。
天蓬老师2017-04-17 15:26:09
a[100] = {0}; 可以視為方便編碼的快速初始化變數記憶體的語法糖,僅在進入該作用域時執行一次,當然作用域可以重複進入就再次執行。
memset是通用的設定memory的函數,任何時都可以呼叫。
PHPz2017-04-17 15:26:09
char a[100] = {0} 是靜態初始化為0,在程式運行前對應的記憶體即為0
memset() 是動態初始化為0,程式執行時將對應的記憶體清除於🎜>