構造体変数宣言とヒープについて(苦しんで覚えるC言語)
解決したいこと
私は現在苦しんで覚えるC言語というサイトで学習を理解できない箇所がありますのでご教示くださいませ。
下記URLの3問目です。
https://9cguide.appspot.com/19-q.html
下記コードのint main(void)のすぐ下にある、
People *data;
は何を表しているのでしょうか?
(ヒープのように使われていますが、、、)
①構造体を実体化するために構造体変数宣言であるPeople data;
がなぜ記述されていないのでしょうか?
②動的配列を格納するためのヒープを int *heap;
などの記述もされてい内容ですが、構造体型のヒープなども存在するのでしょうか?
該当するソースコード
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
char name[256];
int age;
int sex;
} People;
void InputPeople(People *data);
void ShowPeople(People data);
int main(void){
int i,count,datasize;
//ココ
People *data;
//ココ
datasize = 10;
data = (People*)malloc(sizeof(People) * datasize);
count = 0;
while (1) {
InputPeople(&data[count]);
if (data[count].age == -1) break;
count++;
if (count >= datasize) {
datasize += 10;
data = (People*)realloc(data,sizeof(People) * datasize);
}
}
for (i = 0;i < count;i++) {
ShowPeople(data[i]);
}
free(data);
return 0;
}
void InputPeople(People *data){
printf("名前:");
scanf("%s",data->name);
printf("年齢:");
scanf("%d",&data->age);
printf("性別(1-男性、2-女性):");
scanf("%d",&data->sex);
printf("\n");
}
void ShowPeople(People data){
char sex[16];
printf("名前:%s\n",data.name);
printf("年齢:%d\n",data.age);
if (data.sex == 1) {
strcpy(sex,"男性");
} else {
strcpy(sex,"女性");
}
printf("性別:%s\n",sex);
printf("\n");
}
自分で試したこと
このコードできちんと動作することは確認済みです。