【C言語】文字列と配列の詳細解説

【C言語】文字列と配列の詳細解説

配列の基本

C言語の配列とは、同じデータ型の要素を連続したメモリ領域に格納するデータ構造です。

配列の宣言

以下のように配列を宣言します:


int numbers[5]; // 5つの整数を格納できる配列
char letters[10]; // 10文字を格納できる文字配列

配列の初期化


int numbers[5] = {1, 2, 3, 4, 5};
char vowels[] = {'a', 'e', 'i', 'o', 'u'};

配列のアクセス


int numbers[3] = {10, 20, 30};
printf("%d\n", numbers[0]); // 10が出力される
numbers[1] = 25; // 2番目の要素を変更

文字列の基本

C言語の文字列は、char型の配列で表され、最後に'\0'(ヌル文字)を含む必要があります。

文字列の宣言と初期化


char str1[] = {'H', 'e', 'l', 'l', 'o', '\0'};
char str2[] = "Hello"; // '\0' は自動的に追加される

文字列の出力


char message[] = "Hello, World!";
printf("%s\n", message);

配列の操作

配列の要素をループで処理


int numbers[] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
    printf("%d ", numbers[i]);
}

配列の合計を求める


int sum = 0;
int numbers[] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++) {
    sum += numbers[i];
}
printf("Sum: %d\n", sum);

文字列の操作

文字列を扱うには、標準ライブラリのstring.hを使用します。

文字列の長さを取得


#include <string.h>
char str[] = "Hello";
printf("Length: %lu\n", strlen(str)); // 5

文字列のコピー


#include <string.h>
char src[] = "World";
char dest[10];
strcpy(dest, src);
printf("%s\n", dest); // "World"

文字列の連結


#include <string.h>
char str1[20] = "Hello, ";
char str2[] = "World!";
strcat(str1, str2);
printf("%s\n", str1); // "Hello, World!"

ポインタと配列の関係

配列の名前は先頭要素のアドレスを示すポインタとして扱われます。

ポインタを使った配列の操作


int numbers[] = {10, 20, 30};
int *ptr = numbers;
printf("%d\n", *(ptr + 1)); // 20

ポインタによる文字列の操作


char *message = "Hello";
printf("%c\n", *(message + 1)); // 'e'

多次元配列

多次元配列を使うと、行列などのデータを表現できます。

2次元配列の宣言と初期化


int matrix[2][3] = {
    {1, 2, 3},
    {4, 5, 6}
};

2次元配列のアクセス


printf("%d\n", matrix[1][2]); // 6

メモリ管理と注意点

動的メモリ確保

文字列や配列のサイズが決まっていない場合、malloccallocを使います。


#include <stdlib.h>
int *arr = (int*) malloc(5 * sizeof(int));
if (arr == NULL) {
    printf("Memory allocation failed\n");
} else {
    arr[0] = 10;
    free(arr);
}

バッファオーバーフローの回避


char buffer[10];
strncpy(buffer, "TooLongString", sizeof(buffer) - 1);
buffer[sizeof(buffer) - 1] = '\0'; // 末尾をヌル文字で保証

以上がC言語の文字列と配列に関する詳細な解説です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です