c#について質問です。
メソッドの仮引数をメソッド内で変更しても実引数には影響がないらしいですが、引数に配列があった場合、配列の要素を仮引数側で変えると実引数も影響を受けるのはどうしてですか?
例えば
int x=1000
int[] a = {700,800,900}
method(x,a[0])
console.writeline("x="+x)
console.writeline("a[0]="+a[0])
public void method(int y,int[] b)
{
console.writeline("y="+y)
console.writeline("b[0]="+b[0])
y=100
b[0]=200
}
というように書いたときに、
y=1000
b[0]=700
x=1000
a[0]=200
と出力されると思います。
仮引数を変更しても実引数が影響を受けないならa[0]=700と出力されるのではないかと思います。どうしてこう出力されるのか分かりません。参照情報が変わるからa[0]=200であると言うのならどうしてb[0]=200にならないのかも分かりません。
No.1ベストアンサー
- 回答日時:
とかで説明されています。
「メソッドの仮引数をメソッド内で変更しても実引数には影響がない」
というのは
このプログラムの場合、仮引数bを 「変数b」として扱って
b=new int[10];
だの
b=null ;
とやっても「変数bが持っている参照情報が変わる」だけで、「呼び出し元のaが持っている参照情報」は変化しない、ということです。
ここで
「メソッドの仮引数が『参照しているオジュジェクト』をメソッド内で変更しても実引数には影響がない」
とは言っていないことに注意です。
参照情報をコピーしたときには、このような現象が起り得るので、注意が必要です。
-------
「b[0]=200にならないのか」
これは、仮引数云々以前の問題です。
プログラムに基本となる「実行順序」の話です。
メソッドが実行されると、仮引数には、実引数の値が入ります。
この時点で
y=1000 // xの値
b={700,800,900} // aの値
となっています。
console.writeline("y="+y);
console.writeline("b[0]="+b[0]);
が実行されると「この時点でのy,bの値」を使って
y=1000
b[0]=700
と出力されます。
この後で、
y=100;
b[0]=200;
としたところで、一度出力したものが勝手に書き変わったりはしません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- C言語・C++・C# 3つの倍精度浮動小数点値の平均を求めて、3つの引数全てを平均値に変更するメソッドを作成し、キーボード 1 2022/07/13 16:04
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
DataGridViewでセルクリックイ...
-
コマンドプロンプト実行後に画...
-
【sendkeysメソッドが動かずに...
-
オートシェイプの位置がずれる...
-
AdapterView<?> parent この部...
-
VB.NET デリゲートへのコールバ...
-
サーブレット DBにある生年月...
-
Excel VBAにて
-
掲示板で、テキストフィールド...
-
boolean型のフィールドとゲッタ...
-
エクセルVBAにおけるON TIMEメ...
-
struts使用時のメソッド
-
VB.netで、シリアル通信のタイ...
-
オーバーロードの「あいまい」...
-
シンボルを解決できません。 ...
-
canvasに描画したものを全て削...
-
VB.NET/256色でのBMPファイル保存
-
タブコントロールの問題 (VB)
-
計算プログラムでの平方根の求め方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
Labelコントロールに数字を代入...
-
final修飾子を使っているのに、...
-
エクセルVBAにおけるON TIMEメ...
-
コマンドプロンプト実行後に画...
-
mainメソッドのthrows節で設定...
-
DataGridViewでセルクリックイ...
-
javascriptからjavaを呼び出したい
-
VBPをダブルクリックするとたま...
-
onClickで関数呼出し後に、結果...
-
ExcelのxlDialogInsertPictureで。
-
Refreshメソッドの使い方
-
JSPで<SELECT>の中にDBから持っ...
-
【sendkeysメソッドが動かずに...
-
ウィンドウを最前面にできません
-
(String args[])というメッソ...
-
C# 演算 最大値 最小値 表現の仕方
-
Excel VBA シェイプの原型のサ...
-
VB.netで、シリアル通信のタイ...
-
boolean型のフィールドとゲッタ...
おすすめ情報