1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

「値」と「参照」

Last updated at Posted at 2017-05-02

値渡しと参照渡しについて個人的にまとめたメモ。

変数の値か、その変数が格納されているメモリ上のアドレスかを区別するために「値渡し」と「参照渡し」と言ってるのに、
『メモリ上のアドレスも数字、すなわち値じゃん!だから参照じゃなくて、値を渡してるんだ!実際は、参照渡しじゃなくて値渡しだ!』
という意見を見たので、これを書いています。

値と参照の違い

77c472db39c55ac68f950d439d80e2f4.png

上記のエクセルの例で言うと、「address」が値で「E2」が参照にあたる。
「address」も「E2」もであることに変わりないが、それを両方共「値」と表現してしまったら、箱の中身を指しているのか箱の場所を指しているのか分からなくなる。

値に参照が入ることもある

ややこしいことに箱の中身に箱の場所を指定する値(すなわち「参照」)が入っているパターンがある。
そういう意味では参照渡しも値渡しである、という意見も正しくはある。

84fba0cadea7ae5c6d16e5d5fa0be96c.png

上記の状態の時、「E2」の値は「B2」だが
その「B2」を値でななく参照として解釈すると
「E2」から「2017年04月19日」という値にたどり着くことができる。
この時、「E2」の値は参照となる。

上記をC++で表現

#include <iostream>
using namespace std;

int main()
{
  string b2 = "2017年04月19日";
  string& e2 = b2;
  cout << e2 << endl;
  return 0;
}

変数e2は変数b2参照を格納するための変数であると宣言している。
よって、e2を出力しているが、出力結果はb2の中身である「2017年04月19日」となる。

続き

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?