構造体にて配列を含んだ引数を関数に渡す時の記述方法 – プログラミング – Home

構造体にて配列を含んだ引数を関数に渡す...
 
通知
すべてクリア

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


なお
 なお
(@なお)
ゲスト
結合: 25年前
投稿: 35
Topic starter  

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
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

Person* h;

のとき、

(h[0])

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

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

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

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

( h + j )->weight;

という表記になります。


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

一応こちらも確認。

Person info[ 2 ];

のときに、

info;

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


返信引用
なお
 なお
(@なお)
ゲスト
結合: 25年前
投稿: 35
Topic starter  

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました