teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

7

表現変更

2020/06/20 09:32

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -4,7 +4,7 @@
4
4
  コピーせずに構造体を共有したい場合は構造体のアドレスを引き渡すようにします。関数の仮引数はポインタ変数で引き受けます。関数の中で構造体の内容を変更すると呼び出し元の構造体が変更されます。
5
5
 
6
6
  配列は参照型で、関数に渡すとアドレス(ポインタ)が引き渡ります。関数の仮引数はポインタ変数で引き受けることもできますが、配列定義で引き受けとることもできて配列として処理を書けます。
7
- 配列はコピーされずに共有されているので、関数内で配列内容を変更すると呼び出し元の配列が変更されます。
7
+ 配列はコピーされずに共有されているので、関数内で配列内容を変更すると呼び出し元の配列内容が変更されます。
8
8
 
9
9
  ```c
10
10
  #include <stdio.h>

6

表現変更

2020/06/20 09:32

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -1,10 +1,10 @@
1
1
  質問内容とちょっと違いますが、以下に示すソースコードのように構造体の配列にすれば処理がスッキリしますよ。
2
2
 
3
3
  構造体は値型で、関数に渡すと構造体のコピーが渡され、関数の中で構造体の内容を変更しても呼び出し元の構造体内容は変更されません。
4
- コピーせずに構造体を共有したい場合は構造体のアドレスを渡すようにします。関数の引数はポインタ変数で引き受けます。関数の中で構造体の内容を変更すると呼び出し元の構造体が変更されます。
4
+ コピーせずに構造体を共有したい場合は構造体のアドレスを引き渡すようにします。関数の引数はポインタ変数で引き受けます。関数の中で構造体の内容を変更すると呼び出し元の構造体が変更されます。
5
5
 
6
- 配列は参照型で、関数に渡すとアドレス(ポインタ)が渡ります。関数の引数はポインタ変数で引き受けることもできますが、配列定義で引き受けとることもできて配列として処理を書けます。
6
+ 配列は参照型で、関数に渡すとアドレス(ポインタ)が引き渡ります。関数の引数はポインタ変数で引き受けることもできますが、配列定義で引き受けとることもできて配列として処理を書けます。
7
- 配列はコピーされずに共有ているので、配列内容を変更すると呼び出し元の配列が変更されます。
7
+ 配列はコピーされずに共有されているので、関数内で配列内容を変更すると呼び出し元の配列が変更されます。
8
8
 
9
9
  ```c
10
10
  #include <stdio.h>

5

説明補足

2020/06/20 09:31

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -1,4 +1,4 @@
1
- 質問内容とちょっと違いますが、以下のように構造体の配列にすれば処理がスッキリしますよ。
1
+ 質問内容とちょっと違いますが、以下に示すソースコードのように構造体の配列にすれば処理がスッキリしますよ。
2
2
 
3
3
  構造体は値型で、関数に渡すと構造体のコピーが渡され、関数の中で構造体の内容を変更しても呼び出し元の構造体内容は変更されません。
4
4
  コピーせずに構造体を共有したい場合は構造体のアドレスを渡すようにします。関数の引数はポインタ変数で引き受けます。関数の中で構造体の内容を変更すると呼び出し元の構造体が変更されます。

4

説明補足

2020/06/20 02:01

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -1,5 +1,11 @@
1
1
  質問内容とちょっと違いますが、以下のように構造体の配列にすれば処理がスッキリしますよ。
2
2
 
3
+ 構造体は値型で、関数に渡すと構造体のコピーが渡され、関数の中で構造体の内容を変更しても呼び出し元の構造体内容は変更されません。
4
+ コピーせずに構造体を共有したい場合は構造体のアドレスを渡すようにします。関数の引数はポインタ変数で引き受けます。関数の中で構造体の内容を変更すると呼び出し元の構造体が変更されます。
5
+
6
+ 配列は参照型で、関数に渡すとアドレス(ポインタ)が渡ります。関数の引数はポインタ変数で引き受けることもできますが、配列定義で引き受けとることもできて配列として処理を書けます。
7
+ 配列はコピーされずに共有しているので、配列内容を変更すると呼び出し元の配列が変更されます。
8
+
3
9
  ```c
4
10
  #include <stdio.h>
5
11
  #include <stdlib.h>

3

コード修正

2020/06/20 02:00

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -107,8 +107,7 @@
107
107
  //全データの閲覧
108
108
  void ListAll(InfoList list)
109
109
  {
110
- int ID;
111
- for (ID = 1; ID <= SIZE; ID++) {
110
+ for (int ID = 1; ID <= SIZE; ID++) {
112
111
  if (list[ID].name[0] == '\0') continue;
113
112
  printf("------------------------------\n");
114
113
  OutputInfo(list, ID);

2

説明変更

2020/06/20 01:41

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -1,4 +1,4 @@
1
- 質問内容と違いますが、InfoList は Info の配列にすればスッキリ書けるのでは?
1
+ 質問内容とちょっと違いますが、以下ように構造体の配列にすれば処理がスッキリしますよ。
2
2
 
3
3
  ```c
4
4
  #include <stdio.h>
@@ -16,7 +16,7 @@
16
16
  char tel[LENGTH];
17
17
  } Info;
18
18
 
19
- typedef Info InfoList[SIZE + 1]; // [1]~[SIZE], [0]は使わない
19
+ typedef Info InfoList[SIZE + 1]; // [1]~[SIZE]を使用, [0]は使わない
20
20
 
21
21
  // IDの入力を関数化する
22
22
  int InputID()

1

include修正

2020/06/20 01:29

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -1,9 +1,9 @@
1
1
  質問内容とは違いますが、InfoList は Info の配列にすればスッキリ書けるのでは?
2
2
 
3
3
  ```c
4
- #include <stdbool.h>
5
4
  #include <stdio.h>
6
5
  #include <stdlib.h>
6
+ #include <stdbool.h>
7
7
  #include <string.h>
8
8
  #define SIZE 100
9
9
  #define LENGTH 500