是c++對c中的進行了重寫,這兩個標頭檔案中的函式用法是一樣的,所以在用的時候包含哪個標頭檔案都行。下面介紹一下
標頭檔案裡常用的兩個函式;分別是memset和memcpy。
1. memset(void* buffer,int a,size_t n);將buffer當前所指位置後面的n個位元組填充為a,注意memset是按位元組對記憶體塊進行填充的,所以只能
填充0或-1。buffer是乙個指標或者陣列名,a是int型資料,特別注意a只能是0或-1,n是記憶體的大小,即位元組數。一般用memset()來初始化陣列,
效率是比較高的,初始化後可以防止出現「野值」。例如現在有這樣乙個陣列:int a[10];要用0對陣列a進行填充,方法為:memset(a, 0, 10*sizeof(int)),
注意第三個引數了,不要搞錯。
另外再說一下,當buffer是靜態的時候,即buffer是陣列的話,第三個引數還可以寫成:sizeof(buffer),因為此時buffer是乙個陣列,有確定的記憶體大小,
所以在按照位元組填充的時候是沒有問題的;但是如果bufffer如果是動態的話,即buffer是乙個指標,第三個引數就不能像:sizeof(buffer)這樣寫了,只能
老老實實的寫成這個樣子:10*sizeof(int)。下面是我在標頭檔案中找到的memset()函式的原型:
2. memcpy(a, b, size_t n);把b當前所指位置之後的n個位元組中的資料複製到陣列a,和上面的memset()差不多,雖然它們的功能不同,但都是按照位元組進行操作的。
例如有兩個陣列:int a[5]=,b[4]=;現在要把a中的元素複製到b中:memcpy(b, a, 4*sizeof(int)),由於b的長度是4(即20個位元組),所以只能把a當前
所指位置之後的20個位元組的資料複製到b中,否則會越界。
還有一點要說一下,memcpy()還可以實現把乙個陣列中的元素複製到乙個vector容器中,此時第乙個引數為容器,但不能是容器名,第二個引數是數
組名;用這樣的形式:memcpy((int*) &a[0], b, size_t n);其中&a[0]代表容器a的首元素位址,而(int*)是memcpy()函式要求的。另外補充一下,陣列名即
int a[5]=;
vectorv(a,a+5);
即在宣告容器的時候可以直接指定複製,非常方便。下面附上兩個函式的使用**及結果
1 #include2 #include3 #include4using
namespace
std;
5int
main()6;
8int b[4]=;
910 cout<
把陣列a複製到陣列b中後,b中元素為:";
11 memcpy(b,a+1,4*sizeof(int)); //
從a+1開始,把陣列a複製到陣列b中,複製20個位元組的資料
12for(int i=0;i<4;i++) //
a和b所指位置是可以修改的,即a的複製區間是可以改變的,存放到b中的起始位置也是可以改變的
13 cout
1415 vector v1(a,a+5); //
必須先初始化v1,並且v1的長度不小於a的長度,否則複製的時候會越界
16 cout<
\n把陣列a複製到容器v1中後,v1中元素為:";
17for(int i=0;i)
18 cout
1920 memset(a,0,5*sizeof(int)); //
分別用0和-1填充陣列a
21 cout<
\n用0填充陣列a:";
22for(int i=0;i<5;i++)
23 cout
24 cout<
\n用-1填充陣列a:";
25 memset(a,-1,5*sizeof(int
));26
for(int i=0;i<5;i++)
27 cout
28 cout<
\n用1填充陣列b:";
29 memset(b,1,4*sizeof(int)); //
用0和-1以外的數填充會產生非法值
兩個常用的非常有用excel函式
list 查詢函式 vlookup lookup value,array,columindexnum,ranglookup list 有如圖所示資料,我們要查詢相對a1的c1 vlookup a1,a1 c6,3,false 結果為c1.a1是我們要查詢的值。a1 c6,查詢的範圍。3,相對於a1偏...
exit 和 exit 兩個函式的區別
exit 和 exit 這兩個函式都是用於函式退出,但這兩者有一些細微的差別,在exit 函式裡會呼叫 exit 函式。下面來看看exit 的函式 大概 void exit int status exit status 其中 exit funcs是儲存由 cxa atexit和atexit註冊的函式...
exit 和 exit 兩個函式的區別
exit 和 exit 這兩個函式都是用於函式退出,但這兩者有一些細微的差別,在exit 函式裡會呼叫 exit 函式。下面來看看exit 的函式 大概 void exit int status exit status 其中 exit funcs是儲存由 cxa atexit和atexit註冊的函式...