0
0

【備忘録】C++のメモリアクセス

Last updated at Posted at 2024-07-12

C++で以下の例の様に、値をそのままFunctionに渡した場合、

void modVal(int a){
    a = 10;
}

これを以下のように使った場合でも、xの値は変更されずに5のままとなります。

int main(){
    int x = 5;
    modVal(x);
    printf("%d\n", x);  // 5のまま
}

これは、modVal内で、xはコピーとして扱われているためです。
Func内でxを上書きしたい場合には、xのメモリアドレスを渡すことで、意図する機能となります。
&aはaの値のメモリアドレスを表し、modValの*aは、aのアドレスにある値を直接参照します。

void modVal(int *a){
    *a = 10;
}

int main(){
    int x = 5;
    modVal(&x);
    printf("%d\n", x);  // 10にアップデートされる。
}

一方で、Arrayを渡す場合には対応が異なります。C++では、Arrayを渡した場合にはArray内のIndex-0のポインターを渡していることになるようです。したがって、Func内で渡したArrayに加えられた変更は、オリジナルのArrayへの変更をもたらすようです。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0