08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

void göstericilerin kullanımını en iyi açıklayan örnek, standart string.h başlık dosyası<br />

içinde bildirilen memcpy işlevidir.<br />

void *memcpy(void *pdest, const void *psource, size_t nbytes);<br />

memcpy işlevi ikinci parametresiyle belirtilen adresten başlayarak (psource), nbytes<br />

sayıda byte'ı birinci parametresiyle belirtilen adresten(pdest) başlayarak kopyalar.<br />

İşlevin sonlandırıcı karakterle ya da yazılarla bir ilişkisi yoktur, koşulsuz bir kopyalama<br />

yapar. Yani bir blok kopyalaması söz konusudur. İşlev kopyaladığı bellek bloğunda ne<br />

olduğu ya da hangi türden bir veri olduğuyla ilgilenmeksizin kaynak adresten hedef<br />

adrese belirli sayıda byte'ı kopyalar. Özellikle sistem programlarında çok kullanılan bir<br />

standart işlevdir.<br />

memcpy işleviyle örneğin aynı türden herhangi iki dizi birbirine kopyalanabilir:<br />

#include <br />

#include <br />

#define SIZE 10<br />

int main()<br />

{<br />

int a[SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};<br />

int b[SIZE];<br />

int i;<br />

memcpy(b, a, sizeof(int));<br />

for (i = 0; i < SIZE; ++i)<br />

printf("%d\n", b[i]);<br />

}<br />

return 0;<br />

Aşağıdaki işlev çağrıları da eşdeğerdir:<br />

char s[50] = "Ali";<br />

char d[50];<br />

strcpy(d, s);<br />

memcpy(d, s, strlen(s) + 1);<br />

memcpy işlevinin gösterici olan parametreleri void türdendir. Çünkü hangi türden adres<br />

geçirilirse geçirilsin, derleyicilerden herhangi bir uyarı iletisi alınmaz. Bu işlev aşağıdaki<br />

gibi tanımlanabilir:<br />

void *mymemcpy(void *vp1, const void *vp2, unsigned int n)<br />

{<br />

char *p1 = vp1;<br />

const char *p2 = vp2;<br />

unsigned int k;<br />

for (k = 0; k < n; ++k)<br />

p1[k] = p2[k];<br />

}<br />

return vp1;<br />

İşlev şu biçimde de tanımlanabilirdi:<br />

285

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!