参照とポインタの使い分け

C言語から入っているので特にポインタを使うことに抵抗がなく、逆に参照を使うことに抵抗がある。しかし、C++では参照で済むのであれば参照を使えということらしい。

例えば、下記のコードだと、ChangeMonths()はよいが、func_add_use_pointer()は、よろしくないとうことになる…のかな、たぶん。

#include    

/** * 加算を行う関数(参照を使用) */ void func_add_use_ref(int a, int b, int& ref) {     ref = a + b; } /** * 加算を行う関数(ポインターを使用) */ void func_add_use_pointer(int a, int b, int* pointer) {     *pointer = a + b; } /** * 月を逆に並べる(ポインターで渡す)。 */ void ChangeMonths(int* pMonths) {     for (int i = 12; i > 0 ; i--){         *pMonths = i;         pMonths++;     } } /** * サンプルコード */ void main(void) {     int     sum;            // 加算結果     // 参照を使用した場合     func_add_use_ref(1, 1, sum);     printf("加算結果(参照を使用):%d\n", sum);     // ポインターを使用した場合     func_add_use_pointer(1, 1, &sum);     printf("加算結果(ポインターを使用):%d\n", sum);     int     months[12] = {1,2,3,4,5,6,7,8,9,10,11,12};  // 1年     int*    pMonths = months;     // ポインターしか使用できない場合     ChangeMonths(months);     printf("月の並べ替え結果:\n");     for(int i = 0; i < 12; i++){         printf("%d\n", months[i]);     } }

上記コードの実行結果

加算結果(参照を使用):2
加算結果(ポインターを使用):2
月の並べ替え結果:
12
11
10
9
8
7
6
5
4
3
2
1