構造体にて配列を含んだ引数を関数に渡す時の記述方法

[戻る]
なお 2002/06/09(日) 15:11:05
C++で質問です。
すいません、初心者でして誰も聞けるような人がおらず助けてください・・・。
まずソースを書きます。
******************************************************************
1  #include < iostream >
2  using namespace std;
3  
4  struct Person{
5      double height;
6      double weight;
7  };
8  
9  void showhuman ( Person* h );
10 int main ( ) {
11    Person info[ 2 ];
12
13    for ( int i = 0; i < 2; i++ ) {
14        cout << "身長を入力してください。\n";
15        cin >> info[ i ].height;
16        cout << "体重を入力してください\n";
17        cin >> info[ i ].weight;
18    }
19    
20    showhuman( info );
21
22    return 0;
23 }
30 
31 void showhuman( Person* h ) {
32     for ( int j = 0; j < 2; j++ ) {
33        cout << "身長" << h[ j ].height << "体重" 
34        << h[ j ].weight << '\n';
35    }
36 }
******************************************************************
このソース中の20行目で引数をshowhuman関数へ渡しています。showhuman関数はポインタで
配列の先頭のアドレスを受け取っていると思うのですが、アロー演算子ではなくドット演算子で
ビルドが通ります。私の知識ではshowhuman関数が引数をポインタで受けたときはアロー演算子
でなくちゃいけない、且つ20行目はshowhuman( &info )と思っていたのですが、これではエ
ラーがでてしまいます。
基本的に配列を含んだ引数を関数に渡した時は、関数内ではドット演算子を使用すると認識して
よろしいのでしょうか?
宜しくお願い致します。

PAI 2002/06/09(日) 15:43:18
Person* h;

のとき、

(h[0])

の型は、Person、である事はわかります?

ドットとアローですけど、関数内では、とか、引数として、とかじゃなく、
(値の)構造体、オブジェクトには   ドット、
構造体、オブジェクトへのポインタには アロー、
を使用します。

この場合、[] によってポインタ剥がしが行われるために、
値を示すことになろので、ドットを使うわけです。

仮に [] を使わないとしたら

( h + j )->weight;

という表記になります。

PAI 2002/06/09(日) 15:48:02
一応こちらも確認。

Person info[ 2 ];

のときに、

info;

が、配列の先頭アドレスを示す、ということは理解されてます?

なお 2002/06/09(日) 22:29:24
[[解決]]
なるほどです!
構造体、オブジェクトにはドット、
構造体、オブジェクトへのポインタにはアロー
理解できました。
本当にありがとうございます。一人じゃ理解できませんでした・・・(^^;)

古いスレッドには追加発言できません。