質問編集履歴
4
コメント追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -42,7 +42,11 @@
|
|
42
42
|
|
43
43
|
上記の実行結果が以下となり、test()関数内の a_test = ga_test1; の箇所で代入したアドレスが関数を抜けると元のアドレスに戻っています(そもそも書き換えられていない?)。
|
44
44
|
|
45
|
+
|
46
|
+
|
45
47
|
```
|
48
|
+
|
49
|
+
実行結果
|
46
50
|
|
47
51
|
1 : 00CFFAB8
|
48
52
|
|
@@ -138,9 +142,9 @@
|
|
138
142
|
|
139
143
|
|
140
144
|
|
145
|
+
```
|
141
146
|
|
142
|
-
|
143
|
-
|
147
|
+
実行結果
|
144
148
|
|
145
149
|
1 : 00000000
|
146
150
|
|
3
ソースを上書き修正するのではなく、追記する形に変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,3 +1,73 @@
|
|
1
|
+
```C
|
2
|
+
|
3
|
+
#include <stdio.h>
|
4
|
+
|
5
|
+
int ga_test[100] = {1};
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
void test(int* a_test)
|
10
|
+
|
11
|
+
{
|
12
|
+
|
13
|
+
printf("2 : %p\n", a_test);
|
14
|
+
|
15
|
+
a_test = ga_test;
|
16
|
+
|
17
|
+
printf("3 : %p\n", a_test);
|
18
|
+
|
19
|
+
}
|
20
|
+
|
21
|
+
int main(int argc, char* argv[])
|
22
|
+
|
23
|
+
{
|
24
|
+
|
25
|
+
int a_test[100] = {0};
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
printf("1 : %p\n", a_test);
|
30
|
+
|
31
|
+
test(a_test);
|
32
|
+
|
33
|
+
printf("4 : %p\n", a_test);
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
return 0;
|
38
|
+
|
39
|
+
}
|
40
|
+
|
41
|
+
```
|
42
|
+
|
43
|
+
上記の実行結果が以下となり、test()関数内の a_test = ga_test1; の箇所で代入したアドレスが関数を抜けると元のアドレスに戻っています(そもそも書き換えられていない?)。
|
44
|
+
|
45
|
+
```
|
46
|
+
|
47
|
+
1 : 00CFFAB8
|
48
|
+
|
49
|
+
2 : 00CFFAB8
|
50
|
+
|
51
|
+
3 : 00738130
|
52
|
+
|
53
|
+
4 : 00CFFAB8
|
54
|
+
|
55
|
+
```
|
56
|
+
|
57
|
+
代入したアドレスを関数を抜けた後も使用できるようにする方法はあるでしょうか。
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
---
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
追記
|
66
|
+
|
67
|
+
※実現したいことの意図がわかりづらかったので、ソースコードを修正しました。
|
68
|
+
|
69
|
+
|
70
|
+
|
1
71
|
```C
|
2
72
|
|
3
73
|
#include <stdio.h>
|
@@ -68,7 +138,7 @@
|
|
68
138
|
|
69
139
|
|
70
140
|
|
71
|
-
|
141
|
+
|
72
142
|
|
73
143
|
```ここに言語を入力
|
74
144
|
|
@@ -81,7 +151,3 @@
|
|
81
151
|
4 : 00000000
|
82
152
|
|
83
153
|
```
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
代入したアドレスを関数を抜けた後も使用できるようにする方法はあるでしょうか。
|
2
コメント追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -56,6 +56,10 @@
|
|
56
56
|
|
57
57
|
|
58
58
|
|
59
|
+
// テスト
|
60
|
+
|
61
|
+
|
62
|
+
|
59
63
|
return 0;
|
60
64
|
|
61
65
|
}
|
1
やりたいことの意図を明確にしました
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,17 +4,29 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
int ga_test[100] = {1};
|
7
|
+
int ga_test1[100] = {1};
|
8
|
+
|
9
|
+
int ga_test2[100] = {2};
|
10
|
+
|
11
|
+
int ga_test3[100] = {3};
|
8
12
|
|
9
13
|
|
10
14
|
|
11
|
-
void test(int* a_test)
|
15
|
+
void SetTestData(int* a_test, int flg)
|
12
16
|
|
13
17
|
{
|
14
18
|
|
15
19
|
printf("2 : %p\n", a_test);
|
16
20
|
|
21
|
+
if(flg == 1){
|
22
|
+
|
17
|
-
a_test = ga_test;
|
23
|
+
a_test = ga_test1;
|
24
|
+
|
25
|
+
} else if(flg == 2) {
|
26
|
+
|
27
|
+
a_test = ga_test2;
|
28
|
+
|
29
|
+
}
|
18
30
|
|
19
31
|
printf("3 : %p\n", a_test);
|
20
32
|
|
@@ -26,13 +38,19 @@
|
|
26
38
|
|
27
39
|
{
|
28
40
|
|
29
|
-
int a_test
|
41
|
+
int* a_test = NULL;
|
42
|
+
|
43
|
+
int flg = 1;
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
// flgを更新する処理
|
30
48
|
|
31
49
|
|
32
50
|
|
33
51
|
printf("1 : %p\n", a_test);
|
34
52
|
|
35
|
-
test(a_test);
|
53
|
+
SetTestData(a_test, flg);
|
36
54
|
|
37
55
|
printf("4 : %p\n", a_test);
|
38
56
|
|
@@ -46,17 +64,17 @@
|
|
46
64
|
|
47
65
|
|
48
66
|
|
49
|
-
上記の実行結果が以下となり、test()関数内の a_test = ga_test; の箇所で代入したアドレスが関数を抜けると元のアドレスに戻っています(そもそも書き換えられていない?)。
|
67
|
+
上記の実行結果が以下となり、test()関数内の a_test = ga_test1; の箇所で代入したアドレスが関数を抜けると元のアドレスに戻っています(そもそも書き換えられていない?)。
|
50
68
|
|
51
69
|
```ここに言語を入力
|
52
70
|
|
53
|
-
1 : 00
|
71
|
+
1 : 00000000
|
54
72
|
|
55
|
-
2 : 00
|
73
|
+
2 : 00000000
|
56
74
|
|
57
|
-
3 : 00
|
75
|
+
3 : 00F08190
|
58
76
|
|
59
|
-
4 : 00
|
77
|
+
4 : 00000000
|
60
78
|
|
61
79
|
```
|
62
80
|
|