The BAQ/Memo/Linux C/ポインタのポインタ

Japanese English
Nuclear Physics Data Acquisition Orchestra Gallery Memo Diary Link Home
Linux C Fortran Postscript Home

もどる

C言語の基本ですが、よく解らなくなってしまうのでメモ。
ポインタ変数が保持するアドレスを関数を使って書き換えたい場合。

int a = 1, b = -1;

void fun(int **s){
  *s = &b;
}

void fun2(int *s){
  s = &b;
}

int main(int argc, char *argv[]){
  int *pt;

  pt = &a;
  printf("%d\n", *pt);

  fun(&pt);
  //fun2(pt);

  printf("%d\n", *pt);

  return 0;
}

上記プログラムではポインタ変数ptにaのアドレスを入れて、値を表示。
関数funにptのアドレスを渡して、そこにbのアドレスを代入。
最後にまたptがさす値を表示。

fun2の書き方では意味をなさないので注意。
fun2で新たに確保されたポインタ変数sにbのアドレスを代入するだけになるところがミソ。

Last Update: 2006/9/6
Hidetada Baba
baba rarfaxp.riken.jp