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

質問編集履歴

4

コメント追記

2021/07/31 09:23

投稿

hikaru1196
hikaru1196

スコア21

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

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

2021/07/31 09:23

投稿

hikaru1196
hikaru1196

スコア21

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
- 上記の実行結果が以下となり、test()関数内の a_test = ga_test1; の箇所で代入したアドレスが関数を抜けると元のアドレスに戻っています(そもそも書き換えられていない?)。
71
+
37
72
  ```ここに言語を入力
38
73
  1 : 00000000
39
74
  2 : 00000000
40
75
  3 : 00F08190
41
76
  4 : 00000000
42
- ```
77
+ ```
43
-
44
- 代入したアドレスを関数を抜けた後も使用できるようにする方法はあるでしょうか。

2

コメント追記

2021/07/31 09:21

投稿

hikaru1196
hikaru1196

スコア21

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

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

2021/07/31 07:10

投稿

hikaru1196
hikaru1196

スコア21

title CHANGED
File without changes
body CHANGED
@@ -1,33 +1,42 @@
1
1
  ```C
2
2
  #include <stdio.h>
3
3
 
4
- int ga_test[100] = {1};
4
+ int ga_test1[100] = {1};
5
+ int ga_test2[100] = {2};
6
+ int ga_test3[100] = {3};
5
7
 
6
- void test(int* a_test)
8
+ void SetTestData(int* a_test, int flg)
7
9
  {
8
10
  printf("2 : %p\n", a_test);
11
+ if(flg == 1){
9
- a_test = ga_test;
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[100] = {0};
21
+ int* a_test = NULL;
22
+ int flg = 1;
16
23
 
24
+ // flgを更新する処理
25
+
17
26
  printf("1 : %p\n", a_test);
18
- test(a_test);
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 = ga_test; の箇所で代入したアドレスが関数を抜けると元のアドレスに戻っています(そもそも書き換えられていない?)。
34
+ 上記の実行結果が以下となり、test()関数内の a_test = ga_test1; の箇所で代入したアドレスが関数を抜けると元のアドレスに戻っています(そもそも書き換えられていない?)。
26
35
  ```ここに言語を入力
27
- 1 : 00CFFAB8
36
+ 1 : 00000000
28
- 2 : 00CFFAB8
37
+ 2 : 00000000
29
- 3 : 00738130
38
+ 3 : 00F08190
30
- 4 : 00CFFAB8
39
+ 4 : 00000000
31
40
  ```
32
41
 
33
42
  代入したアドレスを関数を抜けた後も使用できるようにする方法はあるでしょうか。