�\����

�v���O���~���OB�̃y�[�W�֖߂�

���̑O�ɁC typedef

typedef ��p����ƁC���ɒ�`����Ă���^�ɁC�ʂ̐V�������O���‚��Ē�`���邱�Ƃ��ł���itypedef �͌^(type)��`(definition)�𗪂����L�[���[�h�ł���j�D���̕��@�͎��̒ʂ�D

typedef�@��`�������^�@��`����V�����^��;

��̓I�ɂ͎��̂悤�ɂ���D

typedef int seisu_t;

����́C seisu_t �Ƃ������O�̌^�� int �^�ł���ƒ�`���Ă���D ���̌^��`��������ł́C seisu_t �� int �̑���Ɏg�����Ƃ��ł���D �������Cint ���ȑO�Ɠ��l�Ɏg�����Ƃ��ł���D

typedef �Œ�`�����^���ɂ� _t ��t���銵�K������D ���̊��K�ɏ]���� _t ��t���Ă����ƁC ���ꂪ typedef �Œ�`���ꂽ�^���ł��邱�Ƃ���ڂŕ�����̂ŕ֗��ł���D

typedef int seisu_t;

main()
{
    int a;        /* ����͐����^�ϐ��̐錾 */
    seisu_t b;      /* ����������^�ϐ��̐錾 */
}

��̗�́C���܂�ɂ��n�����Ă���̂ŁC���������Ӗ��̂����Ƃ��āC���̂悤�Ȃ��̂������Ă������D

typedef int * intPtr_t;

����́C intPtr_t �Ƃ������O�̌^�� int�^���w���|�C���^�^�ł���ƒ�`���Ă���D

typedef �Œ�`�����V�������O�̌^�́C�ϐ��錾�̑��ɂ��C���ʂ̌^�Ɠ����悤�Ɏg����D

typedef int * intPtr_t;

/* intPtr_t �^�������ɂƂ� intPtr_t �^��߂�l�Ƃ���֐� */
/* p �̃|�C���^�l�� 3 �����i�߂��|�C���^�l��Ԃ� */
intPtr_t foo(intPtr_t p)     
{
    return p + 3;
}

main()
{
    int a[10];
    intPtr_t p;           /* intPtr_t �^�̕ϐ��錾 */
    
    p = foo(a);           /* p �̒l�� a[3] ���w���|�C���^�l */
}

�y�[�W�擪�ɖ߂�

�\���̂Ƃ�

�@�\���̂Ƃ́C�u���낢��Ȏ�ނ݂̌��Ɋ֘A����f�[�^���܂Ƃ߂āC �P�‚̂����܂�ɂ������́v�ł���B ���Ƃ��΁C�u�����C�N��C���ʂȂǂ̃f�[�^����l�������܂Ƃ߂����́v ���̂悤�Ȃ��̂������B

\

�@�\���̂��\������v�f���C�\���̂̃����o�ƌĂԁB��̗�ł́C �u���O�v�u���ʁv�u�N��v�u�g���v�u�̏d�v�Ȃǂ��C�����o�ɂ�����B

�y�[�W�擪�ɖ߂�

�\���̂̐錾

�@�\���̂́C��‚̃f�[�^�^�ł���C���̌^�g���܂��n�߂ɐ錾����K�v������B �����āC���̌^�g���^�Ƃ���ϐ���錾����`�ō\���̂̎��́i�I�u�W�F�N�g�j��錾���C ������g�p���邱�Ƃ��ł���B

�\���̂̌^�g�̐錾�ƁC���̌^�g�����\���̕ϐ��̐錾�͎��̂悤�ɂȂ����D

struct �\���̃^�O�� {�����o�̕���};   /* �^�g�̐錾 */

struct �\���̃^�O�� �\���̕ϐ���;     /* �\���̕ϐ��̐錾 */

�Ⴆ�΁C���}�̂悤�Ȑl�̃f�[�^���܂Ƃ߂��\���̂̒�`�͉��̂悤�ɂȂ�B

person \
struct _person {           /* _person ���^�O�� */
    char name[20];        /* �����z��^�̃����o name */
    char sex;              /* �����^�����o sex */
    int age;               /* �����^�����o age */
    double height;         /* �{���x�����^�����o height */
    double weight;         /* �{���x�����^�����o weight */
};


struct _person p;      /* p �Ƃ������O�� struct _person �^�ϐ���錾 */

���̍\���̂̃^�O���� _person �ł���D �^�O���ɂ͂��̐擪�� _ ���‚��銵�K������̂ŁC����ɏ]���� _person �Ƃ������C _ �͕K�������K�v�ł͂Ȃ��B

�@�\���̃^�O���͌^���ł͂Ȃ��C��� struct �Ƃ����L�[���[�h��K�v�Ƃ���B�‚܂�C�P�Ƃł͈Ӗ����Ȃ����C���̂悤�ȏ������͂ł��Ȃ��B

_person p;           /* �ԈႢ */

���ꂪ�ʓ|�ȂƂ��́C typedef ��p���āC struct _person ��ʂ̖��O�̌^�C �Ⴆ�� person_t �Ƃ��Ē�`���Ă����΂悢�B��������΁Cperson_t �͂��̂܂܂Ō^���ł��邩��C struct ��t����K�v���Ȃ��B

typedef struct _person person_t;  /* struct _person �� person_t �Ƃ����^���Œ�` */

person_t p;              /* �ϐ��� p �� person_t �^�ϐ���錾 */

�@���̂悤�ɁC typedef ��p���ĐV�����^�����`����̂Ȃ�΁C�͂��߂��玟�̂悤�ɏ����Ă��ǂ��B�܂��C���̏ꍇ�ɂ́C�\���̃^�O���͕K�v�ł͂Ȃ��B

typedef struct {         /* �\���̂̌^�g���`���āC�����ɂ�����^�� person_t �Ƃ��Ē�`���� */
    char name[20];
    char sex;
    int age;
    double height; 
    double weight; 
} person_t;

person_t p;             /* �ϐ��� p �� person_t �^�ϐ���錾 */

�@�Ȍ�́C���� typedef ��p���ĐV�����^���𒼐ڂɒ�`������@�ō\���̌^�̐錾���s�����ƂƂ���B

�����l�ݒ�

�@�\���̌^�̕ϐ���錾����̂Ɠ����ɁC���̊e�����o�̏����l��ݒ肷�邱�Ƃ��ł���B�e�����o�̏����l�� { } �Ŋ����C�\���̂̒�`�ɂ��鏇�ԂɊe�����o�̒l�ƂȂ�B

person_t p = {"Tom", 'M', 20, 175.2, 66.5};

�y�[�W�擪�ɖ߂�

�����o�Q�Ɓi���ڎQ�Ɓj

�@�\���̌^�ϐ��̒��ɂ��郁���o���Q�Ɓi�A�N�Z�X�j����ɂ́C �ϐ����̌�� "." �i�s���I�h�j�ɑ����ă����o����t����B ���Ƃ��΁C��قǂ̗�ŗp���� p �Ƃ����ϐ����� age ���Q�Ƃ���ɂ́C p.age �Ƃ���B���̗�ł́C p ���̃����o age �� 30 �������Ă���B

typedef struct {
    ....
    int age;              /* �\���̂̃����o�̈�� */
    ....
} person_t;

int main()
{
    person_t p;           /* person_t �^�ϐ� p �̐錾 */

    p.age = 30;         /* p ���̃����o age �� 30 ���� */
    
    ....

���� "." �́C�h�b�g���Z�q���邢�̓����o�Q�Ɖ��Z�q�ƌĂ΂��D

�y�[�W�擪�ɖ߂�

�T���v���v���O�����P

#include <stdio.h>

typedef struct {   
    char name[20];
    char sex; 
    int age;
    double height; 
    double weight; 
} person_t;

main()
{
    person_t p = {"Tom", 'M', 19, 175.2, 69.5};
    
    printf("%s %c %d %f %f\n", p.name, p.sex, p.age, p.height, p.weight);
    p.age ++;
    p.height += 0.7;
    p.weight -= 1.5;
    printf("%s %c %d %f %f\n", p.name, p.sex, p.age, p.height, p.weight);

    return 0;
}
Tom M 19 175.200000 69.500000
Tom M 20 175.900000 68.000000

�y�[�W�擪�ɖ߂�

�\���̂̑��

��‚̍\���̕ϐ��̓��e�S���� �����^�̕ʂ̍\���̕ϐ��ɁC �ʏ�̕ϐ���������̂Ɠ����悤�ɁC������邱�Ƃ��ł���D

    person_t p1 = {"Tom", 'M', 19, 175.2, 69.5};
    person_t p2;
    
    p2 = p1;
\̂̑
#include <stdio.h>

typedef struct {   
    char name[20];
    char sex; 
    int age;
    double height; 
    double weight; 
} person_t;

main()
{
    person_t p1 = {"Tom", 'M', 19, 175.2, 69.5};
    person_t p2;
    
    p2 = p1;         /* �\���̂̑�� */
    
    printf("%s %c %d %f %f\n", p2.name, p2.sex, p2.age, p2.height, p2.weight);

    return 0;
}
Tom M 19 175.200000 69.500000

�y�[�W�擪�ɖ߂�

�\���̂̃T�C�Y

�\���̂̂��ƒ������T�C�Y�́C���̌^��ϐ��Ɠ����悤�ɁC sizeof ���Z�q��p���ē�����D

#include <stdio.h>

typedef struct {   
    char name[20];
    char sex;
    int age;
    double height;
    double weight;
} person_t;

main()
{
  person_t p;

  printf("name=%d, sex=%d, age=%d, height=%d, weight=%d\n",
         sizeof(p.name), sizeof(p.sex), sizeof(p.age), sizeof(p.height), sizeof(p.weight));
  printf("person_t=%d\n", sizeof(p));
}

��̃v���O���������s����ƁC�\���̌^�ł��� person_t �^�̃������T�C�Y���\�������D

name=20, sex=1, age=4, height=8, weight=8
person_t=44

person_t �\���̂̃����o�̃������T�C�Y��S�đ������킹��� 41 �ł���̂ɁC person_t �^�̕ϐ��̃������T�C�Y�� 44 �ƂȂ��Ă���D ���̗��R�́C�R���s���[�^�̃A�N�Z�X���x�𑬂߂邽�߂ɁC �A�N�Z�X�ɓs���̗ǂ��ʒu�Ƀ����o��z�u���邽�߂ł���D ���̌��ʁC�����o�ƃ����o�̊ԂɌ��ԁi�p�f�B���O�ƌĂԁj���ł��āC�S�̂̃������T�C�Y���傫���Ȃ�D

�y�[�W�擪�ɖ߂�

�\���̂̔z��

�\���̂���ׂ��z���������D���̐錾��`�͒ʏ�̂悤�ɂ���΂悢�D

#define PERSON_NUM 5

typedef struct {   
    char name[20];
    char sex; 
    int age;
    double height; 
    double weight; 
} person_t;

person_t p[PERSON_NUM];

����ŁC�v�f����PERSON_NUM�i5�j�� person_t �\���̌^�z�� p ���ł���D

\̔z

���Ƃ��΁C��̐}�ŐF�̂‚��Ă��� p[3] �� height �����o�ɂ́C p[3].height �ŃA�N�Z�X����D

�T���v���v���O�����Q

#include <stdio.h>

#define PERSON_NUM 5

typedef struct {   
    char name[20];
    char sex; 
    int age;
    double height; 
    double weight; 
} person_t;

main()
{
    person_t p[PERSON_NUM] = {{"Bob",      'M', 19, 165.4, 72.5},
                              {"Alice",    'F', 19, 161.7, 44.2},
                              {"Tom",      'M', 20, 175.2, 66.3},
                              {"Stefany",  'F', 18, 159.3, 48.5},
                              {"Leonardo", 'M', 19, 172.8, 67.2}};
    int i;
    double height_sum, weight_sum, height_ave, weight_ave;                          
    
    height_sum = weight_sum = 0.0;
    for (i = 0; i < PERSON_NUM; i++) {
        height_sum += p[i].height;
        weight_sum += p[i].weight;
    }
    height_ave = height_sum / PERSON_NUM;
    weight_ave = weight_sum / PERSON_NUM;
    
    printf("average height = %f\n", height_ave);
    printf("average weight = %f\n", weight_ave);
    
    return 0;
}

�y�[�W�擪�ɖ߂�

�\���̂������o�ɂ���\����

�\���̂̃����o�ɍ\���̂��܂߂邱�Ƃ��ł���D

���̍\���̂̌^ couple_t �́C��قǒ�`���� person_t �\���̌^�̃����o���Q�‚ƁCint �^�̃����o���P�Ž����Ă���D

typedef struct {
    person_t boy;   /* �J�b�v���̂����̒j�̎q�̏�� */
    person_t girl;  /* �J�b�v���̂����̏��̎q�̏�� */
    int month;      /* ���ۗ��i�����j */
} couple_t;
\̂̍\

���̕ϐ��錾�Ə����l�ݒ�̎d���́C�Ⴆ�Ύ��̂悤�ɂȂ�D ��‚̍\���̃����o�� { } �Ŋ����Ă��邱�Ƃɒ��ӂ��悤�D

�\���̂̃����o�ł���\���̂̃����o���Q�Ƃ���ɂ́C �h�b�g���Z�q�𑱂��Ďg�p����΂悢�D �Ⴆ�΁C couple_t �^�ϐ� cpl �̃����o boy �̒��̃����o name ���Q�Ƃ���ɂ́C cpl.boy.name �Ƃ���΂悢�D

main()
{
    couple_t cpl = {{"Tom",     'M', 20, 175.2, 66.3},
                    {"Stefany", 'F', 18, 159.3, 48.5},
                    8};

    printf("%s and %s are going together for %d month(s).\n", 
        cpl.boy.name, cpl.girl.name, cpl.month);

    return 0;
}
Tom and Stefany are going together for 8 month(s).

�\���̌^�ł��郁���o�ɂ́C�����^�̍\���̂𒼐ڑ�����邱�Ƃ��ł���D

     person_t newboy = {"Leonardo", 'M', 19, 172.8, 67.2};
     
     cpl.boy = newboy;
     cpl.month = 1;
     
    printf("%s and %s are going together for %d month(s).\n", 
        cpl.boy.name, cpl.girl.name, cpl.month);

    return 0;
}     
Leonardo and Stefany are going together for 1 month(s).

�y�[�W�擪�ɖ߂�

�֐��ƍ\����

����̂��߂̃T���v���Ƃ��āC���f����\���\���̂�����Ă����D

typedef struct {
    double re;    /* �������� */
    double im;    /* �������� */
} complex_t;

�\���̌^�̊֐�����

�֐��̈����Ƃ��āC�\���̑S�̂̑S�̂��i���̒l���R�s�[���āj�����n�����Ƃ��ł���D �i�z��ł́C���̂悤�Ȃ��Ƃ͂ł��Ȃ��������Ƃɒ��ӂ��悤�j

���̊֐� printComplex �� complex_t �\���̌^�̈������Ƃ�C�����\������D

void printComplex(complex_t c)
{
    printf("%f + %f i\n", c.re, c.im);
}

main()
{
    complex_t c = {1.2, 3.4};
    
    printComplex(c);
}
1.200000 + 3.400000 i

�\���̌^�̊֐��߂�l

�\���̌^���֐��̖߂�l�̌^�Ƃ��邱�Ƃ��ł���D �i�z����֐��̖߂�l�Ƃ��邱�Ƃ͂ł��Ȃ��������Ƃɒ��ӂ��悤�j

���̊֐� addComplex �� complex_t �\���̌^�̈������‚Ƃ�C ���̘a�� complex_t �\���̌^�Ƃ��ĕԂ��D

complex_t addComplex(complex_t a, complex_t b)
{
    complex_t c;
    
    c.re = a.re + b.re;
    c.im = a.im + b.im;
    
    return c;
}

main()
{
    complex_t a = {1.2, 3.4};
    complex_t b = {5.6, 7.8};
    complex_t c;
    
    c = addComplex(a, b);
    printComplex(c);
    
    return 0;
}
6.800000 + 11.200000 i

�\���̃|�C���^�^�̊֐�����

�֐��̈����ɁC�\���̂ւ̃|�C���^�l��^���邱�Ƃ�����D

���̊֐� addComplexPtr �́C�R�‚� complex_t �|�C���^�^�������ɂƂ�C �ŏ��̂Q�‚��w���Ƃ���ɂ��� complex_t �^�̒l�����������̂��C �Ō�̂��̂��w���Ƃ���ɂ��� complex_t �^�ɑ������D

void addComplexPtr(complex_t *a, complex_t *b, complex_t *c)
{
    (*c).re = (*a).re + (*b).re;
    (*c).im = (*a).im + (*b).im;
}

main()
{
    complex_t x = {1.2, 3.4};
    complex_t y = {5.6, 7.8};
    complex_t z;
    
    addComplexPtr(&x, &y, &z);
    printComplex(z);
    
    return 0;
}
6.800000 + 11.200000 i

���̂悤�ɁC�\���̑S�̂̒l���R�s�[���Ĉ����ɓn���̂ł͂Ȃ��C �|�C���^�l������n�����R�ɂ́C�����悻�Q�ʂ肠��D

��‚́C�\���̑S�̂̒l�����|�C���^�l�����̕��������n����Ԃ������Ƃ������Ƃł���D ����́C�������Ǝ��s���Ԃ̗L�����p�Ƃ����_�ł͑厖�ł���D ���̗�̏ꍇ�C�ŏ��̂Q�‚̈��� a �� b �Ƃ��|�C���^�l�ƂȂ��Ă��闝�R�������ł���D

������‚́C�֐��O���̍\���̂̒��g���֐������ŕύX�������Ƃ��ł���D ���̗�̏ꍇ�C�Ō�̈��� c ���|�C���^�l�ƂȂ��Ă��闝�R�������ł���D

���Ő�������Ԑڃ����o�Q�Ɖ��Z�q -> ��p���āC���̂悤�ɂ��������Ƃ��ł���D

void addComplexPtr(complex_t *a, complex_t *b, complex_t *c)
{
    c->re = a->re + b->re;
    c->im = a->im + b->im;
}

�y�[�W�擪�ɖ߂�

�����o�Q�Ɓi�ԐڎQ�Ɓj

�@�\���̂������Ƃ��ɁC�\���̌^�ϐ��𒼐ڈ����̂ł͂Ȃ��āC�\���̌^�ϐ��ւ̃|�C���^����āC�ԐړI�Ɉ������Ƃ��悭����B ���̂悤�ȂƂ��̂��߂ɁC�\���̌^���w���|�C���^�l���炻�ꂪ�w���\���̂̃����o���Q�Ƃ��邽�߂̉��Z�q "->" ������B���̏������͎��̒ʂ�B

�\���̂��w���|�C���^ -> �\���̂̃����o��

���̂悤�ɏ������ꍇ�C����͎��̂悤�ɏ����̂Ɠ����ł���B

(* �\���̂��w���|�C���^).�\���̂̃����o��

�@���Ƃ��Ύ��̗�ł́C�\���� person_t �^�̕ϐ� p �̃A�h���X���C person_t �^���w���|�C���^�ϐ� pp �ɑ�����C���� pp ���w���\���́i���Ȃ킿 p�j�̃����o age �� 45 �������Ă���B

person_t p;        /* �\���� person_t �^�ϐ��̐錾 */
person_t * pp;     /* person_t �^���w���|�C���^�^�̕ϐ��̐錾 */

pp = &p;           /* pp �� p �̃A�h���X������ */
pp -> age = 45;    /* pp ���w���\���̂̃����o age �� 45 ���� */

�܂��C��قǂ̊֐��̗�̏ꍇ�́C�����ɗ^����ꂽ�\���̂ւ̃|�C���^�l a, b, c ����̊ԐڎQ�Ƃ�p���Ă���D

void addComplexPtr(complex_t *a, complex_t *b, complex_t *c)
{
    c->re = a->re + b->re;
    c->im = a->im + b->im;
}

�@�\���̂̃����o�𒼐ڎQ�Ƃ��邽�߂̉��Z�q "." �́C �u�����o���ڎQ�Ɖ��Z�q�v ���邢�͒P�Ɂu�����o�Q�Ɖ��Z�q�v���邢�́u�h�b�g���Z�q�v�ȂǂƌĂ΂��B
�@�܂��C�|�C���^����č\���̂̃����o���ԐڎQ�Ƃ��邽�߂̉��Z�q "->" �́C �u�����o�ԐڎQ�Ɖ��Z�q�v���邢�́u�A���[�i���j���Z�q�v�ȂǂƌĂ΂��B

�y�[�W�擪�ɖ߂�

���p��

�\���̂Ƃ悭�������̂ɁC���p�́iunion�j�ƌĂ΂����̂�����D ����́C�\���̂Ɠ������C���낢��Ȍ^�̃f�[�^���܂Ƃ߂����̂ł���C ���̒�`�̎d���C�����o�ւ̎Q�Ƃ̎d���Ȃǂ��\���̂Ɠ����ł���D �����C����Ă���̂́C���̃����o�����������������p���Ă���Ƃ����_�ł���D

���������āC���p�̌^�̈�‚̕ϐ��̃����o�����́C���̂����̂ǂꂩ��‚��������ɂ͎g�p�ł��Ȃ��D

�Ⴆ�΁C�l�̃f�[�^�i���O�C���ʁC�N��C�D�D�D�j���܂Ƃ߂����̂����p�̂Ƃ��č�����ꍇ�C���̒�`�͎��̂悤�ɂȂ�D

union _person {           /* _person ���^�O�� */
    char name[20];        /* �����z��^�̃����o name */
    char sex;              /* �����^�����o sex */
    int age;               /* �����^�����o age */
    double height;         /* �{���x�����^�����o height */
    double weight;         /* �{���x�����^�����o weight */
};

union _person p;      /* p �Ƃ������O�� union _person �^�ϐ���錾 */

���̋��p�̌^�ϐ� p �̃����o�́C���̐}�̂悤�ɓ�����������ɏd�Ȃ�悤�ɔz�u�����D ���������āC���p�̑S�̂̃������T�C�Y�́C���̃����o�̍ő�̃������T�C�Y�Ɉ�v����D �i���� union _person �̏ꍇ�́C name �� 20 �o�C�g�ōő�ł��邩��C���p�̑S�̂̃T�C�Y�� 20 �ƂȂ�j

p

���p�̂ɂ́C���ɓ���Ȏg���������邪�C�����ł͂��̐����͂��Ȃ��ł����D

�y�[�W�擪�ɖ߂�

���|�[�g���

���̂悤�ɁCperson_t �\���̂łR�l���̃f�[�^�����C����� eggx ��p���ĉ摜�ŕ\������D�i�ȉ~�̐F�Ƒ傫���ƌ`�Ƃɂ́C���ʁC�g���C�̏d�𔽉f������D�j

�ȉ~�̕`�����ɂ‚��ẮC �v���O���~���O�`�̃E�F�u�y�[�W�ɏ����Ă���D

��l���̊G���w�肵�����ɕ\������֐� displayPerson ������āC ����𗘗p����悤�ɂ���ƂȂ��ǂ��D ���̂悤�Ȋ֐������̂�����l�́C���ׂ� main �̒��ōs���Ă��悢�D

typedef struct {   
    char name[20];
    char sex; 
    int age;
    double height; 
    double weight; 
} person_t;


/* win �� eggx �� window �ԍ�
   x �͑ȉ~�Ȃǂ�`�� x ���W */
void displayPerson(int win, int x, person_t * psn)
{
    ........
}


main()
{
    person_t p1 = {"Bob", 'M', 19, 165.4, 72.5};
    person_t p2 = {"Alice", 'F', 19, 161.7, 44.2};
    person_t p3 = {"Tom", 'M', 20, 175.2, 66.3};
    
    .......

    return 0;
}
Bob & Alice & Tom

�y�[�W�擪�ɖ߂�