yuu_nkjm blog


2012-02-10(Fri) [長年日記]

[Programming][Java][C/C++] 値渡しと参照渡し,参照とポインタ,直接参照と間接参照

値渡しと参照渡し,参照とポインタ

値渡しと参照渡し (と参照の値渡し) - 予定は未定Blog版が分かりやすかった.

関連ページ

参照とポインタ,直接参照と間接参照

Javaの参照の値渡しと参照渡し

Javaでは「参照の値渡し」と「参照渡し」を混同しやすい.下記の1番上のページが参考になると思う.

以下,草稿.

#include 
 
void changeValueCallbyRef(int& val) {
  // 実引数として与えられた変数をそのまま操作できるイメージ.
  // valはaそのもの.エイリアスとも呼ばれる.
 
  printf("val=%d, pointer of val=%d\n",val,&val);
  val = 999;
}
 
void changeValuePointer0(int* val){
  // 変数valが作成され,aへのポインタが格納される.
  printf("val=%d, pointer of val=%d\n",val,&val);
 
  // 「ポインタ変数」valに代入しても,aに影響はない
  int b = 111;
  val = &b;
}
 
void changeValuePointer1(int* val){
  //「ポインタ変数」の参照先に値を格納する.
  *val = 555;
  //Javaだと,参照先の値そのものを変更することはできない.
  //Javaでは, 参照先の値やオブジェクトにアクセスすることができる.
  //ここの例で行くと,Javaでは,*valにアクセスはできるが,
  //*valに代入することはできないイメージ.
}
 
int main(void){
  int a = 10;
  int* a_p = &a;
  printf("a=%d, pointer of a=%d\n",a,&a);
  printf("a_p=%d, pointer of a_p=%d\n",a_p,&a_p);
 
  changeValueCallbyRef(a);
  printf("a=%d, pointer of a=%d\n",a,&a);
 
  changeValuePointer0(&a);
  printf("a=%d, pointer of a=%d\n",a,&a);
 
  changeValuePointer1(&a);
  printf("a=%d, pointer of a=%d\n",a,&a);
}
本日のリンク元
その他のリンク元
検索

トップ «前の日記(2012-02-09(Thu)) 最新 次の日記(2012-02-11(Sat))» 月表示 編集 設定
2006|01|06|12|
2007|06|09|
2008|01|03|04|06|07|08|09|10|12|
2009|01|02|05|06|07|08|10|11|12|
2010|03|04|05|06|07|08|09|10|11|
2011|01|02|03|04|05|06|07|08|09|11|12|
2012|01|02|04|06|07|08|10|11|12|
2013|01|02|03|07|08|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|
2015|01|02|07|11|12|
2016|01|03|05|07|08|09|