C
1#include <stdio.h> 2int ga_test[100] = {1}; 3 4void test(int* a_test) 5{ 6 printf("2 : %p\n", a_test); 7 a_test = ga_test; 8 printf("3 : %p\n", a_test); 9} 10int main(int argc, char* argv[]) 11{ 12 int a_test[100] = {0}; 13 14 printf("1 : %p\n", a_test); 15 test(a_test); 16 printf("4 : %p\n", a_test); 17 18 return 0; 19}
上記の実行結果が以下となり、test()関数内の a_test = ga_test1; の箇所で代入したアドレスが関数を抜けると元のアドレスに戻っています(そもそも書き換えられていない?)。
実行結果 1 : 00CFFAB8 2 : 00CFFAB8 3 : 00738130 4 : 00CFFAB8
代入したアドレスを関数を抜けた後も使用できるようにする方法はあるでしょうか。
追記
※実現したいことの意図がわかりづらかったので、ソースコードを修正しました。
C
1#include <stdio.h> 2 3int ga_test1[100] = {1}; 4int ga_test2[100] = {2}; 5int ga_test3[100] = {3}; 6 7void SetTestData(int* a_test, int flg) 8{ 9 printf("2 : %p\n", a_test); 10 if(flg == 1){ 11 a_test = ga_test1; 12 } else if(flg == 2) { 13 a_test = ga_test2; 14 } 15 printf("3 : %p\n", a_test); 16} 17 18int main(int argc, char* argv[]) 19{ 20 int* a_test = NULL; 21 int flg = 1; 22 23 // flgを更新する処理 24 25 printf("1 : %p\n", a_test); 26 SetTestData(a_test, flg); 27 printf("4 : %p\n", a_test); 28 29 // テスト 30 31 return 0; 32}
実行結果 1 : 00000000 2 : 00000000 3 : 00F08190 4 : 00000000
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/31 07:09