ポインタの利用例
ポインタは、関数などを利用する時に、引数の値を間接的に参照したり、代入したりする時に、
よく利用します。関数を呼び出すと、引数の値は、入力として用いられますが、引数を関数内で
変更しても関数が元の位置に戻った時に、その引数値は、無効になりますので、引数を参照しながら
値を保持しつづけたい時に用います。又、配列変数の添え字に連動させて、順番に値を参照したり、
代入したりすることも出来ます。又、文字列にもポインタは、よく用いられます。文字列のポインタは
「文字列型」のように定義することができるので、とても便利です。
任意の文字列をデータベース化したいときは、便利です。この場合は、
参照のみで、内容の変更は行なわない方が無難です。
関数の引数ポインタの例は、整数型配列と
構造体の配列のページも参照してください。
文字列変数のポインタ例(文字列特有の代入・文字列型)
#include <stdio.h> int main(void) { char *str = "avaloky"; /* ポインタを定義して文字列を代入する */ char str_disp[10] = "jupiter"; /* 表示用の文字列 */ char *str_keep; /* 文字列を代入したアドレスの保持用 */ printf("Address of base of str=%p\n", str); /* 作業用メモリの文字アドレスを表示 */ str_keep = str; /* 作業用メモリの文字列位置を保持 */ str = str_disp; /* strにstr_disp のアドレスを代入 */ printf("Adress of str_disp = %p\n", str); /* [str_disp]のアドレスを表示 */ printf("*str=%s\n", str); /* str_disp 文字列の間接参照 */ printf("str_disp=%s\n", str_disp); /* str_disp 文字列を直接表示 */ printf("*str_keep=%s\n", str_keep); /* 作業用メモリに格納した文字を表示 */ printf("Address of str_keep = %p\n", str_keep);/* 作業領域の文字列のアドレスを表示 */ return 0; } |
上の場合は、プログラムのメモリ上のデータ領域に、「avaloky」の文字を格納し、その格納位置のアドレスを利用する一例です。 また、配列変数の場合は、単独の変数と異なり、アドレスを取得する「アドレス演算子」を用いなくても、ポインタに代入可能です。
ポインタ「*str」と、配列変数「str_disp[10]」との違いは、配列変数「str_disp[10]」は、変数であって、メモリ内の情報を変更可能であるが、 ポインタ「*str」は、ポインタとしての変数定義とメモリ上の格納の箱「jupiter」を同時に定義していると思われる、ポインタは変数として扱えないが、 他の変数のアドレスを借りて(代入して)、他の変数の値を参照したり、値の代入を行うことが出来る。間接的に、変数の値を変更できる。 そして、この場合においては、ポインタ型を、定義したときの文字「jupiter」は、プログラムの作業領域にメモリとして確かに存在しているようである。