如题所 char a[100] = {'0'} 与 memset(a, 0, sizeof(a)) 什么区别?
欢迎选择我的课程,让我们一起见证您的进步~~
char a[100] = {'0'};
將a[0]初始化成'0',將後續元素值初始化,即初始化成0,即'這裡有個槓0'。 (槓不出來)如果是
a[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[]的內容置零了。但兩段程式碼用在完全不同的場合,不能互相取代:
a[]
char a[100] = {0}是對數組變數進行宣告和初始化。在此之前a[]還不存在。
char a[100] = {0}
memset(a, 0, sizeof(a))是在前面已經聲明a[]以後,對其內容進行清零操作。在此之前a[]已經存在了。
還有就是memset是個函式庫函數,不是語言本身的能力。
memset
char a[100] = {'0'} 在編譯時即可確定內容,而memset要到運行時才會將內容設為指定值
一個是用字元0(0x30)去填充a 另一個是用0 而且C99似乎會自動添加'0' memset不會 它的意義是將某地址的某區域填充為指定的內容
char a[]得到的a可能在堆疊上, 可能是全域變數, 總之是存在的
char a[]
memset不導致分配, a可以在任何地方
a[100] = {0}; 可以視為方便編碼的快速初始化變數記憶體的語法糖,僅在進入該作用域時執行一次,當然作用域可以重複進入就再次執行。 memset是通用的設定memory的函數,任何時都可以呼叫。
char a[100] = {0} 是靜態初始化為0,在程式運行前對應的記憶體即為0memset() 是動態初始化為0,程式執行時將對應的記憶體清除於🎜>
將
a[0]
初始化成'0'
,將後續元素值初始化,即初始化成0,即'這裡有個槓0'。 (槓不出來)如果是
則第一個元素以'槓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可以在任何地方
a[100] = {0}; 可以視為方便編碼的快速初始化變數記憶體的語法糖,僅在進入該作用域時執行一次,當然作用域可以重複進入就再次執行。
memset是通用的設定memory的函數,任何時都可以呼叫。
char a[100] = {0} 是靜態初始化為0,在程式運行前對應的記憶體即為0
memset() 是動態初始化為0,程式執行時將對應的記憶體清除於🎜>