Skip to content

Commit

Permalink
eklemeler
Browse files Browse the repository at this point in the history
  • Loading branch information
sulincix committed Sep 19, 2023
1 parent e6dc922 commit d980ba1
Show file tree
Hide file tree
Showing 18 changed files with 215 additions and 0 deletions.
55 changes: 55 additions & 0 deletions html/c-dersi.html
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,61 @@ <h1>Pointer ve Address kavramı</h1>
</pre>
<p>Burada fonksiyona değişkenin adresi girilir. Fonksiyon bu adrese toplamı yazar. Daha sonra değişkenimizi kullanabilirsiniz.</p>
</div>
<div class="section" id="dinamik-bellek-yonetimi">
<h1>Dinamik bellek yönetimi</h1>
<p>Dinamik bellek yönetimi için <strong>malloc</strong>, <strong>realloc</strong>, <strong>calloc</strong>, <strong>free</strong> fonksiyonları kullanılır.
Bu fonksiyonlar <strong>stdlib.h</strong> ile sağlanmaktadır.</p>
<p><strong>malloc</strong> fonksiyonu belirtilen boyut kadar boş alanı <strong>void*</strong> olarak tahsis eder.</p>
<pre class="code C literal-block">
<span class="comment single">// 10 elemanlı sayı dizisi oluşturmak için.
</span><span class="keyword type">int</span><span class="whitespace"> </span><span class="operator">*</span><span class="name">sayilar</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="punctuation">(</span><span class="keyword type">int</span><span class="operator">*</span><span class="punctuation">)</span><span class="whitespace"> </span><span class="name">malloc</span><span class="punctuation">(</span><span class="literal number integer">10</span><span class="whitespace"> </span><span class="operator">*</span><span class="whitespace"> </span><span class="keyword">sizeof</span><span class="punctuation">(</span><span class="keyword type">int</span><span class="punctuation">));</span><span class="whitespace">
</span><span class="comment single">// şununla aynı anlama gelir.
</span><span class="keyword type">int</span><span class="whitespace"> </span><span class="name">sayilar</span><span class="punctuation">[</span><span class="literal number integer">10</span><span class="punctuation">];</span>
</pre>
<p><strong>calloc</strong> fonksiyonu malloc ile benzerdir fakat istenen block boyutunu da belirterek kullanılır.</p>
<pre class="code C literal-block">
<span class="comment single">// 10 elemanlı sayı dizisi oluşturmak için
</span><span class="keyword type">int</span><span class="whitespace"> </span><span class="operator">*</span><span class="name">sayilar</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="punctuation">(</span><span class="keyword type">int</span><span class="operator">*</span><span class="punctuation">)</span><span class="whitespace"> </span><span class="name">calloc</span><span class="punctuation">(</span><span class="literal number integer">10</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="keyword">sizeof</span><span class="punctuation">(</span><span class="keyword type">int</span><span class="punctuation">));</span><span class="whitespace">
</span><span class="comment single">// şununla aynı anlama gelir
</span><span class="keyword type">int</span><span class="whitespace"> </span><span class="operator">*</span><span class="name">sayilar</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="punctuation">(</span><span class="keyword type">int</span><span class="operator">*</span><span class="punctuation">)</span><span class="whitespace"> </span><span class="name">malloc</span><span class="punctuation">(</span><span class="literal number integer">10</span><span class="whitespace"> </span><span class="operator">*</span><span class="whitespace"> </span><span class="keyword">sizeof</span><span class="punctuation">(</span><span class="keyword type">int</span><span class="punctuation">));</span>
</pre>
<p><strong>realloc</strong> bir değişkenin yeniden boyutlandırılmasını sağlar.</p>
<pre class="code C literal-block">
<span class="comment single">// 5 elemanlı dizi tanımlayalım.
</span><span class="keyword type">int</span><span class="whitespace"> </span><span class="name">sayilar</span><span class="punctuation">[</span><span class="literal number integer">5</span><span class="punctuation">];</span><span class="whitespace">
</span><span class="comment single">// boyutu 10 yapalım
</span><span class="name">sayilar</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="punctuation">(</span><span class="keyword type">int</span><span class="operator">*</span><span class="punctuation">)</span><span class="whitespace"> </span><span class="name">realloc</span><span class="punctuation">(</span><span class="name">sayilar</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">10</span><span class="operator">*</span><span class="keyword">sizeof</span><span class="punctuation">(</span><span class="keyword type">int</span><span class="punctuation">));</span>
</pre>
<p><strong>free</strong> fonksiyonu değişkeni bellekten siler.</p>
<pre class="code C literal-block">
<span class="comment single">// malloc ile bir alan tanımlayalım.
</span><span class="keyword type">void</span><span class="operator">*</span><span class="whitespace"> </span><span class="name">alan</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name">malloc</span><span class="punctuation">(</span><span class="literal number integer">100</span><span class="punctuation">);</span><span class="whitespace">
</span><span class="comment single">// bu alanı silelim.
</span><span class="name">free</span><span class="punctuation">(</span><span class="name">alan</span><span class="punctuation">);</span>
</pre>
<p>Konunun daha iyi anlaşılması için 2 stringi toplayan fonksiyon yazalım.</p>
<pre class="code C literal-block">
<span class="comment preproc">#include</span><span class="whitespace"> </span><span class="comment preprocfile">&lt;stdlib.h&gt;</span><span class="comment preproc">
#include</span><span class="whitespace"> </span><span class="comment preprocfile">&lt;stdio.h&gt;</span><span class="comment preproc">
#include</span><span class="whitespace"> </span><span class="comment preprocfile">&lt;string.h&gt;</span><span class="comment preproc">
</span><span class="keyword type">char</span><span class="operator">*</span><span class="whitespace"> </span><span class="name function">add</span><span class="punctuation">(</span><span class="keyword type">char</span><span class="whitespace"> </span><span class="operator">*</span><span class="name">s1</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="keyword type">char</span><span class="whitespace"> </span><span class="operator">*</span><span class="name">s2</span><span class="punctuation">){</span><span class="whitespace">
</span><span class="keyword type">int</span><span class="whitespace"> </span><span class="name">ss</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name">strlen</span><span class="punctuation">(</span><span class="name">s1</span><span class="punctuation">);</span><span class="whitespace"> </span><span class="comment single">// ilk arguman uzunluğu
</span><span class="whitespace"> </span><span class="keyword type">int</span><span class="whitespace"> </span><span class="name">sx</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name">strlen</span><span class="punctuation">(</span><span class="name">s2</span><span class="punctuation">);</span><span class="whitespace"> </span><span class="comment single">// ikinci arguman uzunluğu
</span><span class="whitespace"> </span><span class="keyword type">char</span><span class="operator">*</span><span class="whitespace"> </span><span class="name">s3</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="punctuation">(</span><span class="keyword type">char</span><span class="operator">*</span><span class="punctuation">)</span><span class="name">malloc</span><span class="punctuation">(</span><span class="name">ss</span><span class="operator">+</span><span class="name">sx</span><span class="operator">*</span><span class="keyword">sizeof</span><span class="punctuation">(</span><span class="keyword type">char</span><span class="punctuation">));</span><span class="whitespace"> </span><span class="comment single">// uzunluklar toplamı kadar alan ayır.
</span><span class="whitespace"> </span><span class="keyword">for</span><span class="punctuation">(</span><span class="keyword type">int</span><span class="whitespace"> </span><span class="name">i</span><span class="operator">=</span><span class="literal number integer">0</span><span class="punctuation">;</span><span class="name">s1</span><span class="punctuation">[</span><span class="name">i</span><span class="punctuation">];</span><span class="name">i</span><span class="operator">++</span><span class="punctuation">)</span><span class="whitespace"> </span><span class="comment single">// ilkinin tüm elemanlarını kopyala
</span><span class="whitespace"> </span><span class="name">s3</span><span class="punctuation">[</span><span class="name">i</span><span class="punctuation">]</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name">s1</span><span class="punctuation">[</span><span class="name">i</span><span class="punctuation">];</span><span class="whitespace">
</span><span class="keyword">for</span><span class="punctuation">(</span><span class="keyword type">int</span><span class="whitespace"> </span><span class="name">i</span><span class="operator">=</span><span class="literal number integer">0</span><span class="punctuation">;</span><span class="name">s2</span><span class="punctuation">[</span><span class="name">i</span><span class="punctuation">];</span><span class="name">i</span><span class="operator">++</span><span class="punctuation">)</span><span class="whitespace"> </span><span class="comment single">// ikincinin tüm elemanlarını kopyala
</span><span class="whitespace"> </span><span class="name">s3</span><span class="punctuation">[</span><span class="name">i</span><span class="operator">+</span><span class="name">ss</span><span class="punctuation">]</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name">s2</span><span class="punctuation">[</span><span class="name">i</span><span class="punctuation">];</span><span class="whitespace">
</span><span class="name">s3</span><span class="punctuation">[</span><span class="name">ss</span><span class="operator">+</span><span class="name">sx</span><span class="punctuation">]</span><span class="operator">=</span><span class="literal string char">'\0'</span><span class="punctuation">;</span><span class="whitespace"> </span><span class="comment single">// stringler '\0' ile sonlanır
</span><span class="whitespace"> </span><span class="keyword">return</span><span class="whitespace"> </span><span class="name">s3</span><span class="punctuation">;</span><span class="whitespace">
</span><span class="punctuation">}</span><span class="whitespace">

</span><span class="keyword type">void</span><span class="whitespace"> </span><span class="name function">main</span><span class="punctuation">(){</span><span class="whitespace">
</span><span class="keyword type">char</span><span class="whitespace"> </span><span class="operator">*</span><span class="name">new_str</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name">add</span><span class="punctuation">(</span><span class="whitespace"> </span><span class="literal string">&quot;hello&quot;</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal string">&quot;world&quot;</span><span class="punctuation">);</span><span class="whitespace">
</span><span class="name">printf</span><span class="punctuation">(</span><span class="literal string">&quot;%s</span><span class="literal string escape">\n</span><span class="literal string">&quot;</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="name">new_str</span><span class="punctuation">);</span><span class="whitespace">
</span><span class="punctuation">}</span>
</pre>
</div>
</div>
</body>
</html>
94 changes: 94 additions & 0 deletions man/c-dersi.man
Original file line number Diff line number Diff line change
Expand Up @@ -754,5 +754,99 @@ void main(){
.UNINDENT
.sp
Burada fonksiyona değişkenin adresi girilir. Fonksiyon bu adrese toplamı yazar. Daha sonra değişkenimizi kullanabilirsiniz.
.SH DINAMIK BELLEK YÖNETIMI
.sp
Dinamik bellek yönetimi için \fBmalloc\fP, \fBrealloc\fP, \fBcalloc\fP, \fBfree\fP fonksiyonları kullanılır.
Bu fonksiyonlar \fBstdlib.h\fP ile sağlanmaktadır.
.sp
\fBmalloc\fP fonksiyonu belirtilen boyut kadar boş alanı \fBvoid*\fP olarak tahsis eder.
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
// 10 elemanlı sayı dizisi oluşturmak için.
int *sayilar = (int*) malloc(10 * sizeof(int));
// şununla aynı anlama gelir.
int sayilar[10];
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
\fBcalloc\fP fonksiyonu malloc ile benzerdir fakat istenen block boyutunu da belirterek kullanılır.
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
// 10 elemanlı sayı dizisi oluşturmak için
int *sayilar = (int*) calloc(10, sizeof(int));
// şununla aynı anlama gelir
int *sayilar = (int*) malloc(10 * sizeof(int));
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
\fBrealloc\fP bir değişkenin yeniden boyutlandırılmasını sağlar.
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
// 5 elemanlı dizi tanımlayalım.
int sayilar[5];
// boyutu 10 yapalım
sayilar = (int*) realloc(sayilar, 10*sizeof(int));
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
\fBfree\fP fonksiyonu değişkeni bellekten siler.
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
// malloc ile bir alan tanımlayalım.
void* alan = malloc(100);
// bu alanı silelim.
free(alan);
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
Konunun daha iyi anlaşılması için 2 stringi toplayan fonksiyon yazalım.
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char* add(char *s1, char *s2){
int ss = strlen(s1); // ilk arguman uzunluğu
int sx = strlen(s2); // ikinci arguman uzunluğu
char* s3 = (char*)malloc(ss+sx*sizeof(char)); // uzunluklar toplamı kadar alan ayır.
for(int i=0;s1[i];i++) // ilkinin tüm elemanlarını kopyala
s3[i] = s1[i];
for(int i=0;s2[i];i++) // ikincinin tüm elemanlarını kopyala
s3[i+ss] = s2[i];
s3[ss+sx]=\(aq\e0\(aq; // stringler \(aq\e0\(aq ile sonlanır
return s3;
}

void main(){
char *new_str = add( \(dqhello\(dq, \(dqworld\(dq);
printf(\(dq%s\en\(dq, new_str);
}
.ft P
.fi
.UNINDENT
.UNINDENT
.\" Generated by docutils manpage writer.
.
Binary file modified odt/appimage-yapimi.odt
Binary file not shown.
Binary file modified odt/bash-dersi.odt
Binary file not shown.
Binary file modified odt/c-dersi.odt
Binary file not shown.
Binary file modified odt/debian-depo-olusturma.odt
Binary file not shown.
Binary file modified odt/debian-iso-yapimi.odt
Binary file not shown.
Binary file modified odt/debian-kurulumu.odt
Binary file not shown.
Binary file modified odt/debian-paket-yapimi.odt
Binary file not shown.
Binary file modified odt/docker-kullanimi.odt
Binary file not shown.
Binary file modified odt/firefox-eklentisi-yapimi.odt
Binary file not shown.
Binary file modified odt/git-kullanimi.odt
Binary file not shown.
Binary file modified odt/inary-paket-yapimi.odt
Binary file not shown.
Binary file modified odt/makefile-dersi.odt
Binary file not shown.
Binary file modified odt/python-dersi.odt
Binary file not shown.
Binary file modified odt/qemu-kullanimi.odt
Binary file not shown.
Binary file modified odt/vala-dersi.odt
Binary file not shown.
66 changes: 66 additions & 0 deletions rst/c-dersi.rst
Original file line number Diff line number Diff line change
Expand Up @@ -482,3 +482,69 @@ Bir fonksiyon tanımlarken pointer olarak arguman aldırıp bu değerde değişi
}
Burada fonksiyona değişkenin adresi girilir. Fonksiyon bu adrese toplamı yazar. Daha sonra değişkenimizi kullanabilirsiniz.

Dinamik bellek yönetimi
^^^^^^^^^^^^^^^^^^^^^^^
Dinamik bellek yönetimi için **malloc**, **realloc**, **calloc**, **free** fonksiyonları kullanılır.
Bu fonksiyonlar **stdlib.h** ile sağlanmaktadır.

**malloc** fonksiyonu belirtilen boyut kadar boş alanı **void*** olarak tahsis eder.

.. code-block:: C
// 10 elemanlı sayı dizisi oluşturmak için.
int *sayilar = (int*) malloc(10 * sizeof(int));
// şununla aynı anlama gelir.
int sayilar[10];
**calloc** fonksiyonu malloc ile benzerdir fakat istenen block boyutunu da belirterek kullanılır.

.. code-block:: C
// 10 elemanlı sayı dizisi oluşturmak için
int *sayilar = (int*) calloc(10, sizeof(int));
// şununla aynı anlama gelir
int *sayilar = (int*) malloc(10 * sizeof(int));
**realloc** bir değişkenin yeniden boyutlandırılmasını sağlar.

.. code-block:: C
// 5 elemanlı dizi tanımlayalım.
int sayilar[5];
// boyutu 10 yapalım
sayilar = (int*) realloc(sayilar, 10*sizeof(int));
**free** fonksiyonu değişkeni bellekten siler.

.. code-block:: C
// malloc ile bir alan tanımlayalım.
void* alan = malloc(100);
// bu alanı silelim.
free(alan);
Konunun daha iyi anlaşılması için 2 stringi toplayan fonksiyon yazalım.

.. code-block:: C
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char* add(char *s1, char *s2){
int ss = strlen(s1); // ilk arguman uzunluğu
int sx = strlen(s2); // ikinci arguman uzunluğu
char* s3 = (char*)malloc(ss+sx*sizeof(char)); // uzunluklar toplamı kadar alan ayır.
for(int i=0;s1[i];i++) // ilkinin tüm elemanlarını kopyala
s3[i] = s1[i];
for(int i=0;s2[i];i++) // ikincinin tüm elemanlarını kopyala
s3[i+ss] = s2[i];
s3[ss+sx]='\0'; // stringler '\0' ile sonlanır
return s3;
}
void main(){
char *new_str = add( "hello", "world");
printf("%s\n", new_str);
}

0 comments on commit d980ba1

Please sign in to comment.