プライマリ・コンテンツに移動
Pro*C/C++プログラマーズ・ガイド
12c リリース1(12.1)
B71397-03
目次へ移動
目次
索引へ移動
索引

前
次

ポインタ変数

C言語では、他の変数を指すポインタがサポートされています。ポインタには、変数の値ではなくアドレス(格納場所)が保持されます。

ポインタ変数の宣言

ポインタは、次のように、通常のC言語の形式に従ってホスト変数として定義します。

int   *int_ptr; 
char  *char_ptr;

ポインタ変数の参照

SQL文では、次のようにポインタに接頭辞としてコロンを付けてください。

EXEC SQL SELECT intcol INTO :int_ptr FROM ... 

文字列へのポインタを除き、参照される値のサイズは宣言で指定したベース型のサイズにより決定されます。文字列へのポインタの場合、参照される値はNULL終了文字列とみなされます。そのサイズは、strlen()関数のコールにより実行時に決定されます。詳細は、グローバリゼーション・サポートも参照してください。

ポインタを使用すると、構造体のメンバーを参照できます。まずポインタ・ホスト変数を宣言してから、次の例に示すように、必要なメンバーのアドレスにポインタを設定します。構造体メンバーとポインタ変数のデータ型は同一にする必要があります。両者が一致しない場合、ほとんどのコンパイラでは警告が発行されます。

struct 
{ 
    int  i; 
    char c; 
} structvar; 
int   *i_ptr; 
char  *c_ptr; 
... 
main() 
{ 
    i_ptr = &structvar.i; 
    c_ptr = &structvar.c; 
/* Use i_ptr and c_ptr in SQL statements. */ 
... 

構造体ポインタ

構造体へのポインタをホスト変数として使用できます。次の例では

  • 構造体を宣言します。

  • 構造体へのポインタを宣言します。

  • 構造体にメモリーを割り当てます。

  • 構造体へのポインタを問合せでホスト変数として使用します。

  • 構造体のコンポーネントの参照を解除して、結果を出力します。

struct EMP_REC 
{ 
    int emp_number; 
    float salary; 
}; 
char *name = "HINAULT"; 
... 
struct EMP_REC *sal_rec; 
sal_rec = (struct EMP_REC *) malloc(sizeof (struct EMP_REC)); 
... 
EXEC SQL SELECT empno, sal INTO :sal_rec 
    FROM emp 
    WHERE ename = :name; 

printf("Employee number and salary for %s: ", name); 
printf("%d, %g\n", sal_rec->emp_number, sal_rec->salary);

SQL文では、ホスト構造体へのポインタは、ホスト構造体とまったく同じ方法で参照されます。「...のアドレス」を示す表記(&)は不要で、実際には使用するとエラーになります。