■関数とポインタ(その2)

Last modified: Mon April 03 2018
このページは,基礎工学部システム科学科機械科学コース2年生向けの 「コンピュータ基礎演習」における演習1の教材の1つです.

●関数の引数における配列とポインタ

C言語においては, 関数の引数として受け渡される対象としては配列とポインタの区別がない.

関数へ配列を渡す場合は配列の名前だけを引数に書くことは既に述べた. 配列の名前だけを書くと,それは配列の先頭要素のアドレスを表している.つまり, 配列を関数に渡すときは,先頭要素のアドレス(と型の種類)だけが渡されている.

    (例)
    void f(int *a) ←(等価)→ void f(int a[])

仮引数がポインタとして定義されている関数の実引数に配列名を渡しても構わない. 逆に,仮引数が配列として定義されている関数の実引数にポインタを渡しても構わない. ただし,型は一致している必要がある.

●ポインタ値を戻り値とする関数

ポインタ値を戻り値とする関数を作ることができる.

以下のような形式で宣言・定義する.

    型名 *関数名(引数宣言の並び)

ポインタ値を戻り値にするのは以下のような目的による.

●NULLポインタ

ポインタが無効な状態を表すために, 定数NULLが用意されている. これは,ポインタに値が代入されていない状態とは異なるので注意.

NULLはヘッダファイルstdio.hの中で定義されており, 通常ポインタとして使われることない0番地という値が使われている.

    #define NULL (void *)0
(void *)はどのような型へのポインタにも代入できる汎用ポインタへのキャストを意味する.

NULLポインタは,ポインタ値を戻り値とする関数が, 処理に失敗した場合の戻り値としてよく使われる. 次回以降にそのような例を紹介する.


[演習1のインデックス] [前の教材(配列とポインタ)] [次の教材(文字列)]
hirai@me.es.osaka-u.ac.jp