「C言語の基礎 - 配列・メモリ領域」の版間の差分

ナビゲーションに移動 検索に移動
文字列「<source lang」を「<syntaxhighlight lang」に置換
(文字列「</source>」を「</syntaxhighlight>」に置換)
(文字列「<source lang」を「<syntaxhighlight lang」に置換)
 
1行目: 1行目:
== メモリ領域を動的に確保する ==
== メモリ領域を動的に確保する ==
C言語で、メモリ領域を動的に確保するには、stdlib.hのmalloc関数を使用する。<br>
C言語で、メモリ領域を動的に確保するには、stdlib.hのmalloc関数を使用する。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdlib.h>
  #include <stdlib.h>
   
   
13行目: 13行目:
malloc関数を使用したメモリの動的確保は、多くの場合、以下のように実装する。<br>
malloc関数を使用したメモリの動的確保は、多くの場合、以下のように実装する。<br>
以下の例として、int型のデータが10個入るサイズのメモリ領域を確保している。<br>
以下の例として、int型のデータが10個入るサイズのメモリ領域を確保している。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  int *ptr = nullptr;
  int *ptr = nullptr;
   
   
29行目: 29行目:
<br>
<br>
以下の例では、malloc関数を使用して、メモリ領域を動的に確保している。<br>
以下の例では、malloc関数を使用して、メモリ領域を動的に確保している。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdio.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdlib.h>
62行目: 62行目:
== メモリ領域を確保して、その領域を0で初期化する ==
== メモリ領域を確保して、その領域を0で初期化する ==
C言語で、メモリ領域を動的に確保して、その領域を0で初期化するには、stdlib.hのcalloc関数を使用する。<br>
C言語で、メモリ領域を動的に確保して、その領域を0で初期化するには、stdlib.hのcalloc関数を使用する。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdlib.h>
  #include <stdlib.h>
   
   
73行目: 73行目:
<br>
<br>
以下の例では、calloc関数を使用してメモリ領域を動的に確保している。<br>
以下の例では、calloc関数を使用してメモリ領域を動的に確保している。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdio.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdlib.h>
109行目: 109行目:
== 確保したメモリ領域のサイズを変更する ==
== 確保したメモリ領域のサイズを変更する ==
malloc関数やcalloc関数等で確保したメモリ領域のサイズを変更するには、stdlib.hのrealloc関数を使用する。<br>
malloc関数やcalloc関数等で確保したメモリ領域のサイズを変更するには、stdlib.hのrealloc関数を使用する。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdlib.h>
  #include <stdlib.h>
   
   
120行目: 120行目:
<br>
<br>
以下の例では、realloc関数を使用して、確保したメモリ領域のサイズを変更している。<br>
以下の例では、realloc関数を使用して、確保したメモリ領域のサイズを変更している。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdio.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdlib.h>
170行目: 170行目:
malloc関数やcalloc関数、realloc関数で確保したメモリ領域を解放するには、stdlib.hのfree関数を使用する。<br>
malloc関数やcalloc関数、realloc関数で確保したメモリ領域を解放するには、stdlib.hのfree関数を使用する。<br>
free関数は、ptrが指すメモリ領域を解放する関数である。<br>
free関数は、ptrが指すメモリ領域を解放する関数である。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdlib.h>
  #include <stdlib.h>
   
   
177行目: 177行目:
<br>
<br>
以下の例として、free関数を使用してメモリ領域を開放している。<br>
以下の例として、free関数を使用してメモリ領域を開放している。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdio.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdlib.h>
203行目: 203行目:
== 配列やメモリ領域の内容を初期化する ==
== 配列やメモリ領域の内容を初期化する ==
配列を初期化する場合は、以下のように配列の宣言時に初期化子を使用する。<br>
配列を初期化する場合は、以下のように配列の宣言時に初期化子を使用する。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  int a1[] = {1, 2, 3}; /* それぞれ異なる値で初期化 */
  int a1[] = {1, 2, 3}; /* それぞれ異なる値で初期化 */
  int a2[256] = {0};    /* 同一の値で初期化 */
  int a2[256] = {0};    /* 同一の値で初期化 */
221行目: 221行目:
<br>
<br>
memmove関数は、memcpy関数と似ているが、領域の重なり合うオブジェクト間でコピーを行う場合でも正しく動作する。<br>
memmove関数は、memcpy関数と似ているが、領域の重なり合うオブジェクト間でコピーを行う場合でも正しく動作する。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <string.h>
  #include <string.h>
   
   
230行目: 230行目:
<br>
<br>
以下の例では、memcpy関数を使用して、int型の配列をコピーしている。<br>
以下の例では、memcpy関数を使用して、int型の配列をコピーしている。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdio.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdlib.h>
261行目: 261行目:
memcmp関数は、s1が指すオブジェクトの始めのn文字と、s2が指すオブジェクトの始めのn文字を比較する関数である。<br>
memcmp関数は、s1が指すオブジェクトの始めのn文字と、s2が指すオブジェクトの始めのn文字を比較する関数である。<br>
memcmp関数は、比較するオブジェクトが同じなら0、s1 > s2なら正の整数、s1 < s2なら負の整数を返す。<br>
memcmp関数は、比較するオブジェクトが同じなら0、s1 > s2なら正の整数、s1 < s2なら負の整数を返す。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <string.h>
  #include <string.h>
   
   
268行目: 268行目:
<br>
<br>
以下の例では、memcmp関数を使用して、int型の配列を比較している。<br>
以下の例では、memcmp関数を使用して、int型の配列を比較している。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdio.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdlib.h>
322行目: 322行目:
qsort関数は、baseが指すオブジェクトの配列(要素数がnmemb個、各要素の大きさがsizeである配列)を、compareが指す比較関数にしたがって整列する関数である。<br>
qsort関数は、baseが指すオブジェクトの配列(要素数がnmemb個、各要素の大きさがsizeである配列)を、compareが指す比較関数にしたがって整列する関数である。<br>
ちなみに、qsort関数の名前はクイックソートに由来するが、内部でクイックソートアルゴリズムを使用してる保障はない。(処理系定義)<br>
ちなみに、qsort関数の名前はクイックソートに由来するが、内部でクイックソートアルゴリズムを使用してる保障はない。(処理系定義)<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdlib.h>
  #include <stdlib.h>
   
   
340行目: 340行目:
<br>
<br>
以下の例では、qsort関数を使用して、int型の配列を昇順に整列している。<br>
以下の例では、qsort関数を使用して、int型の配列を昇順に整列している。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdio.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdlib.h>
400行目: 400行目:
memchr関数は、文字が見つかった場合は探し出した文字へのポインタを返し、文字が見つからなかった場合はNULLを返す。<br>
memchr関数は、文字が見つかった場合は探し出した文字へのポインタを返し、文字が見つからなかった場合はNULLを返す。<br>
memchr関数を利用すると、メモリ領域の中で指定した文字が現れる位置を探すことができる。<br>
memchr関数を利用すると、メモリ領域の中で指定した文字が現れる位置を探すことができる。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <string.h>
  #include <string.h>
   
   
407行目: 407行目:
<br>
<br>
以下の例では、memchr関数を使用して、char型の配列を探索している。<br>
以下の例では、memchr関数を使用して、char型の配列を探索している。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdio.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdlib.h>
444行目: 444行目:
keyが指すオブジェクトに一致する要素を探索する関数である。<br>
keyが指すオブジェクトに一致する要素を探索する関数である。<br>
なお、baseが指す配列は昇順に整列(ソート)されている必要がある。<br>
なお、baseが指す配列は昇順に整列(ソート)されている必要がある。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdlib.h>
  #include <stdlib.h>
   
   
464行目: 464行目:
<br>
<br>
以下の例では、bsearch関数を使用して、int型の配列を探索している。<br>
以下の例では、bsearch関数を使用して、int型の配列を探索している。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdio.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdlib.h>

案内メニュー