質問編集履歴

4

コメント追記

2021/07/31 09:23

投稿

hikaru1196
hikaru1196

スコア21

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

ソースを上書き修正するのではなく、追記する形に変更

2021/07/31 09:23

投稿

hikaru1196
hikaru1196

スコア21

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
- 上記の実行結果が以下となり、test()関数内の a_test = ga_test1; の箇所で代入したアドレスが関数を抜けると元のアドレスに戻っています(そもそも書き換えられていない?)。
141
+
72
142
 
73
143
  ```ここに言語を入力
74
144
 
@@ -81,7 +151,3 @@
81
151
  4 : 00000000
82
152
 
83
153
  ```
84
-
85
-
86
-
87
- 代入したアドレスを関数を抜けた後も使用できるようにする方法はあるでしょうか。

2

コメント追記

2021/07/31 09:21

投稿

hikaru1196
hikaru1196

スコア21

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

やりたいことの意図を明確にしました

2021/07/31 07:10

投稿

hikaru1196
hikaru1196

スコア21

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[100] = {0};
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 : 00CFFAB8
71
+ 1 : 00000000
54
72
 
55
- 2 : 00CFFAB8
73
+ 2 : 00000000
56
74
 
57
- 3 : 00738130
75
+ 3 : 00F08190
58
76
 
59
- 4 : 00CFFAB8
77
+ 4 : 00000000
60
78
 
61
79
  ```
62
80