【記憶體操作函式】
字串操作函式中有乙個strcpy的函式,它可以拷貝字元型別,那麼有沒有不關心型別的函式呢?這個,當然是有滴,大師們早就將他們寫到庫裡面了。
1.memcpy() 用來複製記憶體,其原型為:
void * memcpy ( void * dest, const void * src, size_t num );
memcpy() 會複製 src 所指的記憶體內容的前 num 個位元組到 dest 所指的記憶體位址上。
memcpy() 並不關心被複製的資料型別,也就是說它可以操作任意型別,只是逐字節地進行複製,這給函式的使用帶來了很大的靈活性,可以面向任何資料型別進行複製。
需要注意的是:
>>1.dest 指標要分配足夠的空間,也即大於等於 num 位元組的空間。如果沒有分配空間,會出現斷錯誤。
>>2.dest 和 src 所指的記憶體空間不能重疊(如果發生了重疊,使用 memmove()會更加安全)。
與 strcpy() 不同的是,memcpy() 會完整的複製 num 個位元組,不會因為遇到「\0」而結束。
【返回值】返回指向 dest 的指標。注意返回的指標型別是 void,使用時一般要進行強制型別轉換。
【函式實現】
#include #include #define max 20
void* my_memcpy(void *dest,const void *src,size_t count)
return pret;
}int main()
; int brr[5]=;
int size=sizeof(brr)/sizeof(brr[0]);
int i=0;
my_memcpy(arr,brr,size);
for (i=0;i結果:
這個就將原陣列中的0乙個不漏的列印出來了,好神奇_^_^_
有了這個函式,就解決了一部分拷貝的問題,為什麼說一部分呢,接下來,聽我慢慢道來。這個時候,我有乙個問題,如果我給定乙個陣列arr[10]=;我想把它的拷貝到上去最後列印出陣列arr結果應該是;接下來看**實現:
#include void* my_memcpy(void *dest,const void *src,size_t count)
return p;
}int main()
; int i=0;
my_memcpy(arr+6,arr+4,16);
for (i=0;i<10;i++)
printf("\n");
return 0;
}
結果:
這個結果怎麼和預先**的結果不一樣呢_~~_這就是出現上面注意的第二點dest 和 src 所指的記憶體空間不能重疊,如果出現重疊,就會出現想不到的問題。
所以此時就要用乙個memmove()的函式,他很好的處理了這個問題。
2.memmove() 用來複製記憶體內容,其原型為:
void * memmove(void *dest, const void *src, size_t num);
memmove() 與 memcpy() 類似都是用來複製 src 所指的記憶體內容前 num 個位元組到 dest 所指的位址上。不同的是,memmove() 更為靈活,當src 和 dest 所指的記憶體區域重疊時,memmove() 仍然可以正確的處理.同樣是上面的問題,具體看下它的實現:
【函式實現】
#include void *my_memmove(void *dest,const void *src,size_t count)
{ int *buf1=(int *)dest;
int *buf2=(int *)src;
int *p=(int *)dest;
if (buf1>buf2&&buf1結果:
這個結果就和預先猜想的一樣了,為什麼會一樣呢?因為當它處理有重疊時,它在拷貝時,會從後往前複製,就不會干擾到源了,所以結果正確。不重疊時,仍然和memcpy()一樣,但效率能比memcpy()
低,因為它在複製之前還要進行判斷_^_._^_
本文出自 「pzd流川楓」 部落格,請務必保留此出處
濾波(opencv自寫函式)
濾波就是把影象中的干擾給去除掉,常用的濾波方法有線性濾波,均值濾波,拉普拉斯銳化等方法。並且每一種方法都有不同的濾波模板。一 均值濾波 用模板掃瞄影象中的畫素點,把掃瞄的點求平均值,用這個平均值代替掃瞄中點。void medianfiltering iplimage img,iplimage dst...
php操作MYSQL資料庫自寫的函式
返回陣列結果 a array 連線位址 登入名 登入密碼 資料庫名 埠 a array 127.0.0.1 root 123 mysql 3306 sqlrun a,select now sqlrun function sqlrun cto array 127.0.0.1 root 123 mysq...
記憶體操作函式
calloc 配置記憶體空間 相關函式 malloc,free,realloc,brk 表頭檔案 include 定義函式 void calloc size t nmemb,size t size 函式說明 calloc 用來配置nmemb個相鄰的記憶體單位,每一單位的大小為size,並返回指向第乙...