初始化函式 void memset

2021-10-03 10:36:54 字數 1014 閱讀 9791

形式:void * memset(void * s, int ch, size_t n);

本質:用來對一段記憶體空間全部設定為某個字元,一般用在對定義的字串進行初始化。

方式:將s中當前位置後面的n個位元組 (typedef unsigned int size_t )用 ch 替換並返回 s,ch只有最低的位元組起作用。

優點:

1.對較大的結構體或陣列清零的最快方法 。

2. memset可以方便的清空乙個結構型別的變數或陣列。

#include

#include

using

namespace std;

intmain()

而,如下程式想把陣列中的元素值設定成1,卻是不可行的

#include

#include

#include

using

namespace std;

intmain()

問題是:第乙個程式為什麼可以,而第二個不行?答:

所以用memset對非字元型陣列賦初值,除了令其等於1或0,其他是不可取的 !!!

另例:

#include

#include

using

namespace std;

intmain()

以上例子出現記憶體訪問衝突應該是因為s被當做常量放入程式儲存空間,menset( ) 只能用於對非常量的記憶體空間初始化。

如果修改為char s="golden global view";則沒有問題了。

建構函式初始化列表和初始化函式

其實並沒有所謂的初始化函式的概念,本文中的初始化函式只是說明在函式體內進行賦值。而初始化列表才是真正意義上的物件初始化。使用初始化列表效率會高一點。c 規定,物件的成員變數的初始化動作發生在進入建構函式本體之前。在建構函式體內只是賦值,並不是初始化。請看下面這個栗子 class base publi...

GLUT初始化函式

void glutinit int argc,char argv 初始化glut庫。對應main函式的形式應是 int main int argc,char argv 這個函式從main函式獲取其兩個引數。void glutinitwindowsize int width,int height 設定...

memset函式初始化

對於絕大多數編譯器來講,char namekey 15 與memset namekey,0x0,sizeof namekey 或memset namekey,0 sizeof namekey 這三個是一樣的。但是有的編譯器,char namekey 15 只將namekey 0 給賦值為 0 其他成...