回答編集履歴

3 回答の修正

y_waiwai

y_waiwai score 58277

2018/03/16 09:20  投稿

> student_input(&data[0]/* あるいは data ? */, 3);
この書き方だと、data[0] のアドレスをstudent_input に渡しています
data 配列の0番目の要素を渡してますが、  
この関数の内容からすると、data という(配列)変数のアドレスを渡すべきですから、
> student_input(&data, 3);
とするのが正解でしょうね。
#ちなみに、上記2通りの書き方では全く同じ値がstudent_input に渡るんで同じ結果になりますが
---
```
void student_input(student *data, int count) {
   int i;
   char txt;
   for (i=0; i<count; i++){
       scanf("%s", data[i]->name);
       scanf("%d", data[i]->year);
       scanf("%s", data[i]->sex);
   }
   return;
}
```
この関数の引数、dataは、student配列のアドレスですから、
data[i] で、student配列のi番目の要素を表します
なので、
> data[i].name
という記述でないとダメですね。
---
で、ホンマは、
dataは、student配列のアドレスですから、
> void student_input(student *(data[]), int count) {
と定義するのが正解なんですねー
#まーどっちでも同じ結果になるんでええっちゃーえーはなしですが
2 回答の修正

y_waiwai

y_waiwai score 58277

2018/03/16 09:14  投稿

> student_input(&data[0]/* あるいは data ? */, 3);
この書き方だと、data[0] のアドレスをstudent_input に渡しています
data 配列の0番目の要素を渡してますが、
この関数の内容からすると、data という(配列)変数のアドレスを渡すべきですから、
> student_input(&data, 3);
とするのが正解でしょうね。
#ちなみに、上記2通りの書き方では全く同じ値がstudent_input に渡るんで同じ結果になりますが
---
```
void student_input(student *data, int count) {
   int i;
   char txt;
   for (i=0; i<count; i++){
       scanf("%s", data[i]->name);
       scanf("%d", data[i]->year);
       scanf("%s", data[i]->sex);
   }
   return;
}
```
この関数の引数、dataは、student配列のアドレスですから、
data[i] で、student配列のi番目の要素を表します
なので、
> data[i].name
という記述でないとダメですね。
---
で、ホンマは、
dataは、student配列のアドレスですから、
> void student_input(student *data[], int count) {
> void student_input(student *(data[]), int count) {
と定義するのが正解なんですねー
#まーどっちでも同じ結果になるんでええっちゃーえーはなしですが
1 回答の追加

y_waiwai

y_waiwai score 58277

2018/03/16 09:14  投稿

> student_input(&data[0]/* あるいは data ? */, 3);
この書き方だと、data[0] のアドレスをstudent_input に渡しています
data 配列の0番目の要素を渡してますが、
この関数の内容からすると、data という(配列)変数のアドレスを渡すべきですから、
> student_input(&data, 3);
とするのが正解でしょうね。
#ちなみに、上記2通りの書き方では全く同じ値がstudent_input に渡るんで同じ結果になりますが
#ちなみに、上記2通りの書き方では全く同じ値がstudent_input に渡るんで同じ結果になりますが
---
```
void student_input(student *data, int count) {
   int i;
   char txt;
   for (i=0; i<count; i++){
       scanf("%s", data[i]->name);
       scanf("%d", data[i]->year);
       scanf("%s", data[i]->sex);
   }
   return;
}
```
この関数の引数、dataは、student配列のアドレスですから、
data[i] で、student配列のi番目の要素を表します
なので、
> data[i].name
という記述でないとダメですね。
---
で、ホンマは、
dataは、student配列のアドレスですから、
> void student_input(student *data[], int count) {
と定義するのが正解なんですねー
#まーどっちでも同じ結果になるんでええっちゃーえーはなしですが

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る