ポインタ引数と参照渡し

ポインタ引数

構造体のポインタを関数に渡していろいろ書き換えたりする。
#include <stdio.h>

typedef struct st{
  int val_int;
  hoge *p_hoge;
}TYPE;

void set_and_show(TYPE *p){
  p->val_int = 100;          // 値の書き換えはこれでおk
  printf("%d", p->val_int);  // 値の表示もこれでおk
  return;
}

int main(void){
  // 始めから開き直って構造体のポインタを扱ってると楽(どうせ構造体は配列として扱うことが多い。)
  TYPE *p_str = (TYPE *) malloc( sizeof(TYPE) );

  // ポインタなのでそのまま渡せば自動的にアドレス渡しになる。
  set_and_show(p_str);

  // 使い終わったら解放することを忘れずに。
  free(p_str);

  return 0;
}

参照渡しの効用

あからさまにポインタ渡ししてないのに、
1. 関数定義内で普通の変数のように書ける。
2. 呼び出しも値渡しのように書ける。
// 宣言と定義
void rewrite( int &a )
{
  a = 100;
}

// 使用
int main()
{
int a = 10;
cout << a << endl;
rewrite( a );
cout << a << endl;
return 0;
}
最終更新:2010年01月07日 11:07
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。