C 構造体とポインター
C 構造体とポインタ
このチュートリアルでは、ポインターを使用して C プログラミングで構造体のメンバーにアクセスする方法を学習します。また、構造体型のメモリを動的に割り当てる方法も学習します。
ポインタを構造体で使用する方法について学習する前に、次のチュートリアルを確認してください:
- C ポインタ
- C 構造体
構造体への C ポインター
構造体へのポインターを作成する方法は次のとおりです。
struct name {
member1;
member2;
.
.
};
int main()
{
struct name *ptr, Harry;
}
ここで、ptr struct
へのポインタです .
例:ポインターを使用してメンバーにアクセスする
ポインターを使用して構造体のメンバーにアクセスするには、->
を使用します
#include <stdio.h>
struct person
{
int age;
float weight;
};
int main()
{
struct person *personPtr, person1;
personPtr = &person1;
printf("Enter age: ");
scanf("%d", &personPtr->age);
printf("Enter weight: ");
scanf("%f", &personPtr->weight);
printf("Displaying:\n");
printf("Age: %d\n", personPtr->age);
printf("weight: %f", personPtr->weight);
return 0;
}
この例では、person1 の住所 personPtr に保存されます personPtr = &person1;
を使用したポインター .
これで、person1 のメンバーにアクセスできます personPtr
を使用して ポインター。
ところで、
personPtr->age
(*personPtr).age
と同等ですpersonPtr->weight
(*personPtr).weight
と同等です
構造体の動的メモリ割り当て
このセクションに進む前に、C の動的メモリ割り当てを確認することをお勧めします。
宣言した構造体変数の数が不十分な場合があります。実行時にメモリを割り当てる必要がある場合があります。 C プログラミングでこれを実現する方法は次のとおりです。
例:構造体の動的メモリ割り当て
#include <stdio.h>
#include <stdlib.h>
struct person {
int age;
float weight;
char name[30];
};
int main()
{
struct person *ptr;
int i, n;
printf("Enter the number of persons: ");
scanf("%d", &n);
// allocating memory for n numbers of struct person
ptr = (struct person*) malloc(n * sizeof(struct person));
for(i = 0; i < n; ++i)
{
printf("Enter first name and age respectively: ");
// To access members of 1st struct person,
// ptr->name and ptr->age is used
// To access members of 2nd struct person,
// (ptr+1)->name and (ptr+1)->age is used
scanf("%s %d", (ptr+i)->name, &(ptr+i)->age);
}
printf("Displaying Information:\n");
for(i = 0; i < n; ++i)
printf("Name: %s\tAge: %d\n", (ptr+i)->name, (ptr+i)->age);
return 0;
}
プログラムを実行すると、出力は次のようになります:
Enter the number of persons: 2 Enter first name and age respectively: Harry 24 Enter first name and age respectively: Gary 32 Displaying Information: Name: Harry Age: 24 Name: Gary Age: 32
上記の例では、n n で作成される構造体変数の数 ユーザーによって入力されます。
n にメモリを割り当てるには struct person の数 、使用しました
ptr = (struct person*) malloc(n * sizeof(struct person));
次に、ptr を使用しました person の要素にアクセスするポインタ .
C言語