2021-05-12 14:32:11
C/C++中memset,memcpy的使用及fill對陣列的操作
2020-12-09 09:00:28
對陣列的整體賦值,以及兩個陣列間的複製容易出錯,這裡使用string標頭檔案中的memset和memcpy進行
不必遍歷陣列,速度快。
之前沒有標頭檔案,顯示decla
標頭檔案:
程式碼:
/* Project: 陣列的整體賦值與複製 Date: 2018/07/31 Author: Frank Yu memset(陣列名,0或-1,位元組) memcpy(陣列名,陣列名,位元組) */ #include<iostream> #include<cstring> //memset需要標頭檔案 #include<cstdio> #define n 5 using namespace std; int main() { int a[n]; int b[n]; memset(a,0,sizeof(a));//初始化為0 //memset(b,1,sizeof(b));//初始化為1,錯誤 memset(b,-1,sizeof(b)); printf("請輸入%d個數:n",n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } printf("第一個陣列為:n"); for(int i=0;i<n;i++) { printf("%d ",a[i]); } printf("n"); printf("第二個陣列為:n"); for(int i=0;i<n;i++) { printf("%d ",b[i]); } printf("n"); memcpy(a,b,sizeof(b));//b的元素複製給a printf("第一個陣列被第二個陣列覆蓋後:n"); for(int i=0;i<n;i++) { printf("%d ",a[i]); } return 0; }
結果截圖:
20190304更新...
fiil函數需要標頭檔案 algorithm fill執行速度不如memset
fill(first,last,val)對陣列進行初始化,first,last為地址,val為值。例如,fill(a,a+5,123) 將陣列a的前5個初始化為123。
補充知識:C++ 中使用memset和memcpy 對字串和字串陣列處理
我就廢話不多說了,大家還是直接看程式碼吧~
#include <iostream> #include <string.h> using namespace std; struct SomeInfo { char id[30]; char name[30]; }; struct TotalInfo { char total[20]; SomeInfo my[10]; }; class myClass { public: myClass() { } ~myClass() { } void memcopy(int ,TotalInfo); void print(); private: TotalInfo m_totalInfo; int m_count; }; void myClass::memcopy(int count ,TotalInfo info) { m_count = count; memcpy(&m_totalInfo,&info,sizeof(m_totalInfo)); } void myClass::print() { std::cout << m_totalInfo.total << std::endl; for (int i = 0; i != m_count ; ++i) { std::cout << m_totalInfo.my[i].id << std::endl; std::cout << m_totalInfo.my[i].name << std::endl; } } int main() { myClass here = myClass(); TotalInfo totalInfo; memset(&totalInfo, 0, sizeof(totalInfo)); char total[20] = "totalInfo.total"; memcpy(totalInfo.total,total,20); int count = 5; for (int i = 0; i != count ; ++i) { char _id[30] = "totalInfo.Some.id"; char _name[30] = "totalInfo.Some.name"; memcpy(totalInfo.my[i].id, _id,sizeof(_id)); memcpy(totalInfo.my[i].name, _name,sizeof(_name)); } here.memcopy(count, totalInfo); here.print(); return 0; }
在main函數的第三行,memset初始化新申請的記憶體。memset:作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法。
一共三個引數,地址,請零(目前做的是清零動作,而不是char型值),地址空間大小。
memcpy 也有三個引數,一個目標地址,源地址,和 大小。
以上這篇C/C++中memset,memcpy的使用及fill對陣列的操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章