C/C++中memset,memcpy的使用及fill對(duì)數(shù)組的操作
對(duì)數(shù)組的整體賦值,以及兩個(gè)數(shù)組間的復(fù)制容易出錯(cuò),這里使用string頭文件中的memset和memcpy進(jìn)行
不必遍歷數(shù)組,速度快。
之前沒有頭文件,顯示decla
頭文件:
代碼:
/* Project: 數(shù)組的整體賦值與復(fù)制 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,錯(cuò)誤 memset(b,-1,sizeof(b)); printf("請(qǐng)輸入%d個(gè)數(shù):\n",n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } printf("第一個(gè)數(shù)組為:\n"); for(int i=0;i<n;i++) { printf("%d ",a[i]); } printf("\n"); printf("第二個(gè)數(shù)組為:\n"); for(int i=0;i<n;i++) { printf("%d ",b[i]); } printf("\n"); memcpy(a,b,sizeof(b));//b的元素復(fù)制給a printf("第一個(gè)數(shù)組被第二個(gè)數(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)對(duì)數(shù)組進(jìn)行初始化,first,last為地址,val為值。例如,fill(a,a+5,123) 將數(shù)組a的前5個(gè)初始化為123。
補(bǔ)充知識(shí):C++ 中使用memset和memcpy 對(duì)字符串和字符串?dāng)?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初始化新申請(qǐng)的內(nèi)存。memset:作用是在一段內(nèi)存塊中填充某個(gè)給定的值,它是對(duì)較大的結(jié)構(gòu)體或數(shù)組進(jìn)行清零操作的一種最快方法。
一共三個(gè)參數(shù),地址,請(qǐng)零(目前做的是清零動(dòng)作,而不是char型值),地址空間大小。
memcpy 也有三個(gè)參數(shù),一個(gè)目標(biāo)地址,源地址,和 大小。
以上這篇C/C++中memset,memcpy的使用及fill對(duì)數(shù)組的操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mingw64編譯wxWidgets 3.0.2常見錯(cuò)誤分析
這篇文章主要介紹了Mingw64編譯wxWidgets 3.0.2常見錯(cuò)誤分析,需要的朋友可以參考下2016-11-11如何通過wrap malloc定位C/C++的內(nèi)存泄漏問題
用C/C++開發(fā)的程序執(zhí)行效率很高,但卻經(jīng)常受到內(nèi)存泄漏的困擾。本文提供一種通過wrap malloc查找memory leak的思路。2021-05-05C++ OpenCV繪制簡(jiǎn)易直方圖DrawHistImg
本文主要介紹了一個(gè)能繪制簡(jiǎn)易直方圖的簡(jiǎn)單函數(shù)DrawHistImg,可以幫助大家快速掌握繪制的原理,可以根據(jù)自己的創(chuàng)意對(duì)其進(jìn)行改善和補(bǔ)充。需要的朋友可以參考一下2021-12-12c++多線程之死鎖的發(fā)生的情況解析(包含兩個(gè)歸納,6個(gè)示例)
這篇文章主要介紹了c++多線程之死鎖的發(fā)生的情況解析(包含兩個(gè)歸納,6個(gè)示例),需要的朋友可以參考下2018-01-01C語言中qsort函數(shù)用法實(shí)例小結(jié)
這篇文章主要介紹了C語言中qsort函數(shù)用法,包括了針對(duì)各種數(shù)據(jù)類型參數(shù)的排序,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-09-09