前回では、構造体の定義についてみてきた。
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
コメント