A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
批判的な意味ではなくて、
なんか、プログラムに慣れておられない質問という感じがします。
言語における参照渡し、値渡しを、整理する必要が出ているのでしょうか?何かの課題??
回答ありがとうございます。”慣れる”ということは理屈云々というよりも実際の仕様としてそうなっているということですね。CとFortranで考えていますが、仕様が真逆になる可能性だってあったかもしれませんね。つまりそう覚えるしかない、そう慣れるしかないのだ、ということなのだろうと思います。なぜ?などと考えているから習得が遅れるのだろうと思います。
No.6
- 回答日時:
>Cの場合はポインタでアドレスの値を渡すと呼び出し先の変更が呼び出し元に反映されるから結果的に参照渡しと同じ効果は可能なのかな(すなわち両方アリ)と思いますが、違うでしょうか。
結果はその通りなので、同じような効果は得られます。
ただ、C言語では、ポインタという「場所を表す値」が渡されるにすぎません。この値は、呼び出し先の関数内ではローカル変数と同じ扱いができますので、呼び出し先関数内で自由に値を変更することもできます。ただ、「引数であるポインタ変数自体の値」を変更(たとえば、void func(char *a) { a = NULL; })しても、当然呼び出し元で保持している値には影響しません。
回答ありがとうございます。Cでアドレスの値を渡した後でそのアドレスに格納されている変数を変化させる方法が単純に値(アドレス)を変更しただけではダメなので参照渡しとは言えないのだと理解しました。参照渡しと同じ効果が得られるとしてもですね。
No.5
- 回答日時:
引数の渡し方と、関数の動作とは分けて考えるべきだと思っています。
値渡しを使って、呼び出し元の状態を変化させる、というのはよくあります。
それを「参照渡し」と読んでしまうと、本来の参照渡しと混同してしまい、扱いを間違えてしまいそうです。
例えば、Javaで
void methodA(classA a) {
a.memberA=1 ;
}
ってメソッドでも
methodA(b) ;
の後は
b.memberA == 1
になっています。
No.4
- 回答日時:
「結果的に参照渡しと同じ効果が得られる」だけで, 厳密には値渡ししかないけどね. 言葉遊びだといえばそうだけど.
ちなみに今の Fortran では値渡しもできるってさ.
No.3
- 回答日時:
いえ、Cは値渡ししか出来ません
仰るようにアドレスを渡してやれば、確かに読み出し元の値を書き換え、結果として参照渡し相当が実現できます
しかしこれは結果に過ぎません
この場合は、あくまでアドレスを渡したのであって、値は渡していませんよね
参照渡しなら、値であれ、アドレスであれ、渡したデータを呼び出し先で書き換えたら、それが呼び出し元に反映されます
値渡しではそうなりません
No.2
- 回答日時:
呼び出した関数で、パラメータとして渡されたポインタの
指すアドレスの内容は、変更しない方が良いです。
やり方としては、呼び出された関数で領域を確保し、
そこに、値を入れ、関数の戻り値として、その領域の
ポインタを返しましょう。
No.1
- 回答日時:
> Cの場合はポインタでアドレスの値を渡すと呼び出し先の変更が呼び出し元に反映されるから
「呼び出し先の変更が呼び出し元に“反映”される」というのはちょっと理解の仕方が違うかと。。。
ポインター渡しというのは呼び出し側が確保しているメモリー領域のアドレスを示して「そちらでの処理結果をこちらが確保しているこの場所へセットしてください」とするものです。
つまり呼び出し先が呼び出し元が保持している領域へ直接値をセットしています。
参考まで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- Excel(エクセル) エクセル関数をご教授ください。 2 2023/08/09 12:17
- 転職 仲がいい退職する同僚に個人的にプレゼント買ったのですが… 2 2022/07/06 08:01
- Excel(エクセル) エクセル テーブル機能の不明点 2 2022/04/14 14:10
- Excel(エクセル) エクセル・スプレッドシートで、一定数を超えたらゼロから再累計する方法 8 2022/05/28 03:52
- PHP phpでアクセスカウンターの数値の割合でリンク先を変更したい 1 2022/09/16 11:47
- Excel(エクセル) Excel 表の作成について 3 2022/06/16 12:15
- Excel(エクセル) エクセルの自動更新のタイミングについて 1 2022/07/20 16:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
テキストボックスの設定。
-
VB初心者。小数点以下の表示で...
-
Powershellのparamについて
-
VB.NETでコンボボックスの1行目...
-
ポインタのプログラムについて
-
変数名の取得
-
C# get set
-
ACCESS VBA 画像ファ...
-
textboxとLabelを動的に変更する
-
PL/SQLでのTO_DATEの時間取得に...
-
VBAでWEB上の入力項目に値をい...
-
vbaの繰り返しで求める最大値に...
-
オブジェクト型の変数同士の値...
-
Dbtypeって?
-
値を返さないコード パス
-
C言語です
-
【C++/CLI.NET】コンボボックス...
-
[VB.net] DataGridViewのコンボ...
-
マクロで奇数と偶数の値を2か所...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
マクロ 特定のセル値のみクリ...
-
VB.NETでコンボボックスの1行目...
-
変数名の取得
-
値を返さないコード パス
-
Excel VBAのリストボックスの値...
-
VB初心者。小数点以下の表示で...
-
ハッシュテーブル(連想配列)が...
-
textboxとLabelを動的に変更する
-
PL/SQLでのTO_DATEの時間取得に...
-
VB.NETでアクティブなformを知...
-
Excel vba ユーザーフォームテ...
-
マクロで奇数と偶数の値を2か所...
-
DataTableに対するLINQについて
-
【C++/CLI.NET】コンボボックス...
-
[VBA]選択範囲の下から上に処理...
-
範囲が指定されている乱数について
-
[VB.net] DataGridViewのコンボ...
-
変数に代入してある数値を表示...
-
vbscriptを使いexcelを参照して...
おすすめ情報