LoginSignup
6
3

More than 5 years have passed since last update.

C言語に参照渡しは存在しない

Last updated at Posted at 2016-03-20

標題の通りで,C言語に参照渡しは存在しない.
Google翻訳に参照を翻訳してもらった.

参照とは

スクリーンショット 2016-03-20 18.12.55.jpg
参照とはリファレンスのこと.逆に言えばリファレンスしか存在しない言語はポインタが存在しないと言うこと.(違う?)

c言語での値渡し

早速以下のプログラムを作成した.
スクリーンショット 2016-03-20 18.03.45.jpg

実行した結果が以下の通りだ.
スクリーンショット 2016-03-20 18.04.32.jpg
関数に変数のアドレス(第1引数)を渡して,関数内部で値を書き換えている.そのため,渡した関数で表示が書き換わっているのが確認できる.
この渡し方を「値渡しのポインタ渡し」という.
第2引数は「値渡しの値渡し」という(誰も言っていない).

ポインタ渡し

今回のメインである参照渡しが存在しないことの証明プログラムを載せる.
スクリーンショット 2016-03-20 18.10.28.jpg

そもそも参照渡しは何かと言えば,上記のmainプログラム結果に100が表示されることを指す.

c++の参照渡し(本物の参照渡し^^)

スクリーンショット 2016-03-21 00.46.35.jpg
スクリーンショット 2016-03-21 0.47.08.jpg
想定通り・・・かな.

しかしc言語のプログラムのように関数の呼び出し先で,変数にアドレスを格納する.
スクリーンショット 2016-03-21 0.51.03.jpg
どういうこと!?
もしかして,私はc++を知らない!?
(技術力不足で派遣先をクビになったぐらいだからな・・・)

結論

c++を勉強し直します.

あれから20160403(追記)

コメントにて @SaitoAtsushi さんから参照についてのアドバイスをいただいた.
「参照とは別名である」
もろ,答えですね.
参照渡しで変数を渡す20160403.jpg
変数の中身を別名変数に渡した場合問題なくmain関数で表示される.
さらに,別名変数を上書きすべく努力したが無駄だった.
参照変数の上書き努力.jpg
ありとあらゆる格納方法を試したが,すべてエラーになってしまった.
やはり,1度付いた名前はどうすることも出来ないと言うことだと理解した.
これを機に,変数名にキラキラネームを付けないようにしようと思いました.
コメントを付けていただきありがとうございました.
上記のソースコード
※さらに残念ながらGitの使い方も理解していなかった.これは後日勉強し直す.

参考URL

http://qiita.com/bugdasi/items/7856931f4cacf2c5b743
※またこのページを参考にした.
http://www.gologo13.com/2013/03/23/how-to-compile-c-plus-plus-with-clang/

6
3
1

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
6
3