C言語の基礎「構造体(3)」

スポンサーリンク
C言語

前回では、構造体の定義についてみてきた。
C言語の基礎「構造体(2)」

今回は、構造体を活用してみよう。

Person型の値を仮引数pで受け取り、そのメンバの値を出力する関数を考えてみよう。

void print_info(Person p)
{
    printf("名前:%s,年齢:%d\n",p.name,p.age);
}

これでPerson型の値を関数で受けることができる、ハズであるが、

例えば、次のような関数では、上手く動作しない。

void birthday(Person p)
{
    p.age++;
}

ここで受け取る仮引数pの値は、実引数のコピーなので、関数の中でいくら値を増やしても、呼び出し元に影響を与えないのである。

そこで、ポインタを受け渡しするように変更してみよう。

void birhday(Person *p)
{
    (*p).age++;
}

これで、呼び出し元で宣言したPerson型の変数の値が変わる。

さっそくプログラムコードで確認してみよう。

#include <stdio.h>

 typedef struct Person
{
      char name[16];
      int age;
      
} Person;
  
  void print_info(Person p)
{
    printf("名前:%s,年齢:%d\n",p.name,p.age);
}

void birthday(Person *p)
{
    (*p).age++;
}

int main(void)
{
  Person p = { "ISONOKAMI TAO",17 };
  
  print_info(p);
  birthday(&p);
  print_info(p);
}

実行結果

名前:ISONOKAMI TAO,年齢:17
名前:ISONOKAMI TAO,年齢:18

コメント

タイトルとURLをコピーしました