私は独学で C++ を学んでおり、配列とポインターについていくつか質問がありました。私の理解では、配列は実際には単なるポインターですが、配列は変更できない アドレス定数です。
show2()
この場合、関数でポインターのアドレスを変更できたのはなぜだろうと思っていましたlist
。変数とは異なり、配列は参照渡しだと思っていたので、関数show2()
のアドレスをインクリメントしたため、関数を呼び出すときにコンパイラ エラーが発生することが予想されていましたlist
。しかし、コードは問題なく動作します。誰か説明してくれませんか?
ありがとうございました!
#include<iostream>
#include<iomanip>
using namespace std;
void show1(double *list, int SIZE)
{
for(int i=0; i < SIZE; i++)
{
cout << setw(5) << *(list+i);
}
cout << endl;
return;
}
void show2(double *list, int SIZE)
{
double *ptr = list;
for(int i=0; i < SIZE; i++)
cout << setw(5) << *list++;
cout << endl;
return;
}
int main()
{
double rates[] = {6.5, 7.2, 7.5, 8.3, 8.6,
9.4, 9.6, 9.8, 10.0};
const int SIZE = sizeof(rates) / sizeof(double);
show1(rates, SIZE);
show2(rates, SIZE);
return 0;
}