ゾンビでもわかるC言語プログラミング

C言語入門者の応援をします

配列とポインタの関係

配列はアドレスを保持しており、多くの点でポインタ型変数と同じように扱うことができます。

以下のコードでは、配列変数の中身を表示しています。

#include <stdio.h>
#include <string.h>

int main() {
    char s[10];

    strcpy(s, "Hello!");

    printf("%p\n", s);
    printf("%llx\n", s);

    return 0;
}

出力

0x7ffc5473ed80
7ffc5473ed80

配列である s に格納されている値は、アドレスです。
また、以下のコードを実行してみてください。

#include <stdio.h>
#include <string.h>

int main() {
    char s[10];

    strcpy(s, "Hello!");

    printf("%p\n", s);
    printf("%c\n", *s);

    return 0;
}

出力

0x7fff68552cc0
H

s に格納されているアドレスに格納されている値をアスタリスクをつけて表示したところ、文字列の先頭の H が出力されました。

さらに以下のコードを実行してみてください。

#include <stdio.h>
#include <string.h>

int main() {
    char s[10];

    strcpy(s, "Hello!");

    printf("%p\n", s);
    printf("%p\n", s+1);
    printf("%c\n", *(s+1));

    return 0;
}
0x7ffec86288e0
0x7ffec86288e1
e

ポインタと同じように、アドレスに 1 を足すと、2文字目の e が表示されました。

上記から配列はポインタと同じようにアドレスを保持しており、多くの点でポインタと同じような操作ができることがわかりました。

書籍

新・明解C言語 入門編 (明解シリーズ)

新・明解C言語 入門編 (明解シリーズ)

苦しんで覚えるC言語

苦しんで覚えるC言語

やさしいC 第5版 (「やさしい」シリーズ)

やさしいC 第5版 (「やさしい」シリーズ)

C実践プログラミング 第3版

C実践プログラミング 第3版