teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記

2018/04/19 10:12

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -37,4 +37,23 @@
37
37
  var = -1
38
38
  func(var)
39
39
  print(var) # -1
40
+ ```
41
+
42
+ 私が『参照渡し』に期待する動作
43
+ ---
44
+ ```C++
45
+ #include<iostream>
46
+
47
+ void func(int& arg) {
48
+ arg = 42;
49
+ std::cout << arg << std::endl; // 42
50
+ }
51
+
52
+ int main(void) {
53
+ int val = -1;
54
+ func(val);
55
+ std::cout << val << std::endl; // 42
56
+
57
+ return 0;
58
+ }
40
59
  ```

2

追記

2018/04/19 10:12

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -10,4 +10,31 @@
10
10
  > pythonってポインタ渡しみたいなことできないんですか?
11
11
 
12
12
  もともと全部ポインタ渡しみたいなもんです。
13
- 参照値を関数内部で書き換えたときに呼び出し元に影響しないのはCも一緒。
13
+ 参照値を関数内部で書き換えたときに呼び出し元に影響しないのはCも一緒。
14
+ ```C
15
+ #include <stdio.h>
16
+
17
+ int the_answer = 42;
18
+ void func(int* arg) {
19
+ arg = &the_answer;
20
+ printf("%d\n", *arg); // 42
21
+ }
22
+
23
+ int main(void) {
24
+ int var = -1;
25
+ func(&var);
26
+ printf("%d\n", var); // -1
27
+
28
+ return 0;
29
+ }
30
+ ```
31
+
32
+ ```Python
33
+ def func(arg):
34
+ arg = 42
35
+ print(arg) # 42
36
+
37
+ var = -1
38
+ func(var)
39
+ print(var) # -1
40
+ ```

1

修正

2018/04/19 05:01

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  上から順にお勧めです。
2
2
  - **戻り値で結果を返すようにする**
3
3
  気軽に複数の要素を返せますし、Cと違ってうっかりフルコピーしてしまうことがないです。
4
- - **ミュータブルな要素を引数として渡す**
4
+ - **ミュータブルな要素を引数として渡す**
5
5
  状況によってはこちらが自然です。
6
6
  - **グローバル宣言をして再代入**
7
7
  個人的には禁忌だと思います。『Python global』で調べてください。