C/C++中memset,memcpy的使用及fill對數(shù)組的操作
對數(shù)組的整體賦值,以及兩個數(shù)組間的復制容易出錯,這里使用string頭文件中的memset和memcpy進行
不必遍歷數(shù)組,速度快。
之前沒有頭文件,顯示decla
頭文件:
代碼:
/* Project: 數(shù)組的整體賦值與復制 Date: 2018/07/31 Author: Frank Yu memset(數(shù)組名,0或-1,字節(jié)) memcpy(數(shù)組名,數(shù)組名,字節(jié)) */ #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個數(shù):\n",n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } printf("第一個數(shù)組為:\n"); for(int i=0;i<n;i++) { printf("%d ",a[i]); } printf("\n"); printf("第二個數(shù)組為:\n"); for(int i=0;i<n;i++) { printf("%d ",b[i]); } printf("\n"); memcpy(a,b,sizeof(b));//b的元素復制給a printf("第一個數(shù)組被第二個數(shù)組覆蓋后:\n"); for(int i=0;i<n;i++) { printf("%d ",a[i]); } return 0; }
結(jié)果截圖:
20190304更新...
fiil函數(shù)需要頭文件 algorithm fill執(zhí)行速度不如memset
fill(first,last,val)對數(shù)組進行初始化,first,last為地址,val為值。例如,fill(a,a+5,123) 將數(shù)組a的前5個初始化為123。
補充知識:C++ 中使用memset和memcpy 對字符串和字符串數(shù)組處理
我就廢話不多說了,大家還是直接看代碼吧~
#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函數(shù)的第三行,memset初始化新申請的內(nèi)存。memset:作用是在一段內(nèi)存塊中填充某個給定的值,它是對較大的結(jié)構(gòu)體或數(shù)組進行清零操作的一種最快方法。
一共三個參數(shù),地址,請零(目前做的是清零動作,而不是char型值),地址空間大小。
memcpy 也有三個參數(shù),一個目標地址,源地址,和 大小。
以上這篇C/C++中memset,memcpy的使用及fill對數(shù)組的操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Visual C++程序設(shè)計中Windows GDI貼圖閃爍的解決方法
這篇文章主要介紹了Visual C++程序設(shè)計中Windows GDI貼圖閃爍的解決方法,分析了GDI貼圖閃爍的常見原因及其具體解決方法,具有一定參考借鑒價值,需要的朋友可以參考下2015-01-01C++中與輸入相關(guān)的istream類成員函數(shù)簡介
這篇文章主要介紹了C++中與輸入相關(guān)的istream類成員函數(shù)簡介,包括eof函數(shù)和peek函數(shù)以及putback函數(shù)還有ignore函數(shù),需要的朋友可以參考下2015-09-09C語言解3元1次方程組 用初中學的最基本的聯(lián)合消元法
最近就想自己能不能先寫個算線性方程組的程序呢?后來就想了這么個方法,暫時只能算3元的,任意元的接下來繼續(xù)想。有太多硬編碼,希望有興趣的讀者可以給點修改建議2013-11-11