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