情報処理のWeb教科書―IPA情報処理試験対策のお供に!
C言語のポインタについてまとめています。変数の宣言方法から構造体ポインタまで解説しています。
この記事の目次です。
C言語のポインタとは、データのメモリの位置を保存して参照したり変更したりすることのできる変数です。 コンピュータのメモリにはアドレスがあり、そのアドレスを扱う変数をポインターといいます。
C言語のポインタの宣言方法について見ていきます。
ポインタ変数は、変数の場所(アドレス)を記憶する変数です。 ポインタ変数はまずはじめに変数のアドレスを代入して初期化しなければなりません。
ポインタ変数に変数のアドレスを代入してはじめて、ポインタの指すアドレスを見たり、そのアドレスの変数に記憶してある値を操作することができます。
ポインタ変数の初期化の例です。
int *p; /*ポインタpの宣言*/ int n; /*変数nを宣言*/ p = &n; /*ポインタ変数pを変数nのアドレスで初期化*/ *p = 999; printf("アドレス(%p)の変数の値は、%dである。\n", p,*p);
ポインタ変数の初期化の間違いの例です。 ポインタ変数に何もアドレスが記憶されていないのでそのアドレスの変数に値は代入できません。
int *p; //ポインタpの宣言 *p = 999; printf("アドレス(%p)の変数の値は、%dである。\n", p,*p);
//ファイル名:Sample1.c #include <stdio.h> int main(void) { int *p; /*ポインタpの宣言*/ int n; /*変数nを宣言*/ p = &n; /*ポインタ変数pを変数nのアドレスで初期化*/ *p = 999; printf("アドレス(%p)の変数の値は、%dである。\n", p,*p); return 0; }
gcc Sample1.c
作成したa.exeというファイルと同じディレクトリでSample1とコマンドラインに入力して、 「アドレス(16進数の数字)の変数の値は、999である。」と出力されます。
例)
>a.exe
アドレス(0012FF88)の変数の値は、999である。
//ファイル名:Sample2.c
#include <stdio.h>
int main(void) {
// 変数nに9999を代入して表示
int n = 9999;
printf("変数nのアドレス(%p)の値は、%dである。\n", &n, n);
// 変数pにnのアドレスを代入して表示
int *p = &n;
printf("変数pのアドレス(%p)の値は、%dである。\n", p, *p);
// 変数p経由でnの値を変更して表示
*p = 8888;
printf("変数nのアドレス(%p)の値は、%dである。\n", &n, n);
return 0;
}
gcc Sample2.c
作成したa.exeというファイルと同じディレクトリでa.exeとコマンドラインに入力して、以下のように表示されます。
変数nのアドレス(16進数の数字)の値は、9999である。 変数pのアドレス(16進数の数字)の値は、9999である。 変数nのアドレス(16進数の数字)の値は、8888である。
ポインターに配列のアドレスを設定すれば、ポインターで配列が扱えます。 また、ポインターの配列を利用することで複数の文字列が扱えます。
#include <stdio.h> void hello(char *str) { printf("Hello %s!!\n", str); } int main(void) { char *str = "World"; hello(str); return 0; }
コンパイルし、実行すると以下のように表示されます。
Windows)a.exe Linux) ./a.out Hello World!!
C言語の構造体とポインターについてみていきます。
C言語には、複数のデータを一まとまりにする構造体という仕組みが用意されています。
structの直後に「タグ名」、構造体内の各データのことを「メンバ」と呼びます。 たとえば、次のように定義します。
struct Person { char* name; char* address; }
構造体のメンバへのアクセスには、「.」、ドット演算子を使用しますが、構造体のデータを指し示すポインタについては、ドットではなくて、「->」、アロー演算子を使用します。
struct Person *person; person = malloc(sizeof(struct Person)); person->name = strdup("太郎");
Windowsでも使えるフリーソフトのgccコンパイラで学ぶC言語入門用のオリジナルテキストをまとめています。 フリーソフトのgccコンパイラのインストール方法や基本文法はもちろんですが、分割コンパイルやヘッダーファイルの作成方法など入門者にとって気になる内容もまとめています。
Copyright (C) 2010-2018 情報処理のWeb教科書. All Rights Reserved. Loarding…