구조에 대한 포인터는 전체 구조의 추가를 보유합니다.
연결 목록, 트리, 그래프 등과 같은 복잡한 데이터 구조를 만드는 데 사용됩니다.
구조체의 멤버는 화살표 연산자( -> )라고 하는 특수 연산자를 사용하여 액세스할 수 있습니다.
선언
다음은 C 프로그래밍에서 구조체에 대한 포인터 선언입니다. -
struct tagname *ptr;
예:struct 학생 *s;
액세스
구조체에 대한 포인터에 액세스하는 방법은 아래에 설명되어 있습니다.
Ptr-> membername;
예:s->sno, s->sname, s->marks;
예시
다음은 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 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: 1 Enter name and age respectively: bhanu 24 Displaying Information: Name: bhanu Age: 24
예시 2
포인터와 구조를 설명하는 C 프로그램이 제공되는 포인터와 구조에 대한 또 다른 예를 고려하십시오.
#include<stdio.h>
//Declaring outer and inter structures//
struct Manager{
char Name[15];
int Age;
char Gender;
float Level;
char Role[50];
char temp;
}m[20];
void main(){
//Declaring variable for For loop and pointer variable//
int i;
struct Manager *p;
//Defining Pointer//
p=&m;
//Reading User I/p//
for (i=1;i<3;i++){//Declaring function to accept 2 manager's data//
printf("Enter the Name of manager %d : ",i);
gets(p->Name);
printf("Enter the Age of manager %d : ",i);
scanf("%d",&p->Age);
scanf("%c",&p->temp);//Clearing Buffer//
printf("Enter the Gender of manager %d : ",i);
scanf("%c",&p->Gender);
//scanf("%c",&p->temp);//Clearing Buffer//
printf("Enter the level of manager %d : ",i);
scanf("%f",&p->Level);
scanf("%c",&p->temp);//Clearing Buffer//
printf("Enter the role of manager %d : ",i);
gets(p->Role);
p++;
}
//Defining Pointer one more time to print output//
p=&m;
//Printing O/p//
for (i=1;i<3;i++){
printf("The Name of Manager %d is : %s\n",i,p->Name);
printf("The Age of Manager %d is : %d\n",i,p->Age);
printf("The Gender of Manager %d is : %c\n",i,p->Gender);
printf("The Level of Manager %d is : %f\n",i,p->Level);
printf("The Role of Manager %d is : %s\n",i,p->Role);
p++;
}
} 출력
위의 프로그램을 실행하면 다음과 같은 결과가 나온다 -
Enter the Name of manager 1 : Hari Enter the Age of manager 1 : 55 Enter the Gender of manager 1 : M Enter the level of manager 1 : 2 Enter the role of manager 1 : Senior Enter the Name of manager 2 : Bob Enter the Age of manager 2 : 60 Enter the Gender of manager 2 : M Enter the level of manager 2 : 1 Enter the role of manager 2 : CEO The Name of Manager 1 is : Hari The Age of Manager 1 is : 55 The Gender of Manager 1 is : M The Level of Manager 1 is : 2.000000 The Role of Manager 1 is : Senior The Name of Manager 2 is : Bob The Age of Manager 2 is : 60 The Gender of Manager 2 is : M The Level of Manager 2 is : 1.000000 The Role of Manager 2 is : CEO