c++入门必学库函数 memset
一、memset的介紹
memset是c語言的string.h里的字符串初始化函數,但是也經常用于普通數組的初始化,它的優點就是簡單易用,一行代碼就可以初始化數據了,當然這完全可以用for循環賦值代替的。
二、memset的基本用法
函數模板:
memset(數組首地址,初始值,初始化大小)
數組首地址:數組的首地址是可以直接用數組名代替的
初始值: 初始值的范圍是0到127,因為memset是以字節為單位對數組進行賦值的,一個字節8位,所表達的值就是0到127
初始化大小: 初始化大小用一個整數表示,表示需要初始化多少字節,通常用sizeof(數組首地址)來獲得需要初始化的大小
看著有點難懂沒關系,看完示例代碼就清晰了
1、char數組的初始化
memset本來就是為char數組初始化準備的
示例代碼:
#include<iostream> #include<cstring>//c語言的頭文件是string.h,c++的頭文件是cstring using namespace std;//命名空間 int main(){char arr[10]; memset(arr,'a',10);//從數組首地址開始,初始化10個字節的值為'a';cout<<"memset(arr,'a',10)后,數組的值為:"<<endl; for(int i=0;i<10;i++){//打印 cout<<arr[i]<<' ';}cout<<endl;cout<<endl;memset(arr+2,'b',4);//從數組首地址+2開始,即arr[2]的地址開始,初始化4個字節的值為'b';cout<<"memset(arr+2,'b',4)后,數組的值為:"<<endl; for(int i=0;i<10;i++){//打印 cout<<arr[i]<<' ';}cout<<endl;cout<<endl;cout<<"sizeof arr的值為"<<(sizeof arr)<<endl;//sizeof可以獲取到數組的大小,這個代碼中sizeof arr的值就是10 memset(arr,'c',sizeof arr);//從數組首地址開始,初始化數組大小個字節的值為'c'cout<<"memset(arr,'c',sizeof arr)后,數組的值為:"<<endl; for(int i=0;i<10;i++){//打印 cout<<arr[i]<<' ';}}運行結果:
memset(arr,'a',10)后,數組的值為: a a a a a a a a a amemset(arr+2,'b',4)后,數組的值為: a a b b b b a a a asizeof arr的值為10 memset(arr,'c',sizeof arr)后,數組的值為: c c c c c c c c c c2、普通數組的初始化
普通數組的初始化用法有點局限,因為int型的大小是32位的、long long型的大小是64位的,而memset只能以8位為單位初始化數組。
普通數組我們只需要學習兩個初始值就可以了,一個是0,一個是0x3f
0: 0是最簡單的了,就是把全部字節都置零,那么無論是int還是long long都可以全部初始化為0了
0x3f: 0x指的是十六進制的意思,說明 3f 是一個十六進制數,十六進制0-9是不變的,用a、b、c、d、e、f來代表10、11、12、13、14、15,那么3f對應的二進制就是0011 1111的意思,我們一般需要用最大值的時候是不會取真正的最大值的,因為最大值進行相加運算的時候就會越界了,這是有風險的,我們應該取最大值的一半或者更小一點,即經常使用的 0x3f3f3f3f ,而0x3f就可以把每 8 位都初始化為這個值,如果是 int 型的,那么就會被初始化為 0x3f3f3f3f ,如果是long long型,那么就會被初始化為 0x3f3f3f3f3f3f3f3f
總的來說,我們需要初始化為 0 的時候就用 0,需要初始化為最大值的時候就用0x3f
示例代碼:
#include<iostream> #include<cstring>//c語言的頭文件是string.h,c++的頭文件是cstring using namespace std;//命名空間 int main(){cout<<"int型數組"<<endl; int arr1[10];//定義一個int型數組 memset(arr1,0,sizeof arr1);//初始化數組為0cout<<"memset(arr1,0,sizeof arr1)后,數組的值為" <<endl;for(int i=0;i<10;i++){//打印 cout<<arr1[i]<<' ';} cout<<endl;memset(arr1,0x3f,sizeof arr1);//初始化數組為int型最大值的一半 cout<<"memset(arr1,0x3f,sizeof arr1)后,數組的值為" <<endl;for(int i=0;i<10;i++){//打印 cout<<arr1[i]<<' ';} cout<<endl;cout<<endl;cout<<"long long型數組"<<endl; long long arr2[10];//定義一個long long型數組 memset(arr2,0,sizeof arr2);//初始化數組為0cout<<"memset(arr2,0,sizeof arr2)后,數組的值為" <<endl;for(int i=0;i<10;i++){//打印 cout<<arr2[i]<<' ';} cout<<endl;memset(arr2,0x3f,sizeof arr2);//初始化數組為int型最大值的一半 cout<<"memset(arr2,0x3f,sizeof arr2)后,數組的值為" <<endl;for(int i=0;i<10;i++){//打印 cout<<arr2[i]<<' ';} }運行結果:
int型數組 memset(arr1,0,sizeof arr1)后,數組的值為 0 0 0 0 0 0 0 0 0 0 memset(arr1,0x3f,sizeof arr1)后,數組的值為 1061109567 1061109567 1061109567 1061109567 1061109567 1061109567 1061109567 1061109567 1061109567 1061109567long long型數組 memset(arr2,0,sizeof arr2)后,數組的值為 0 0 0 0 0 0 0 0 0 0 memset(arr2,0x3f,sizeof arr2)后,數組的值為 4557430888798830399 4557430888798830399 4557430888798830399 4557430888798830399 4557430888798830399 4557430888798830399 4557430888798830399 4557430888798830399 4557430888798830399 4557430888798830399點個贊吧!
總結
以上是生活随笔為你收集整理的c++入门必学库函数 memset的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win11 defender关闭以及恢复
- 下一篇: matlab求解外卖配送路径优化