संरचना का सूचक संपूर्ण संरचना का जोड़ रखता है।
इसका उपयोग जटिल डेटा संरचनाएं जैसे लिंक्ड सूचियां, पेड़, ग्राफ़ इत्यादि बनाने के लिए किया जाता है।
संरचना के सदस्यों को एक विशेष ऑपरेटर का उपयोग करके एक्सेस किया जा सकता है जिसे एरो ऑपरेटर ( -> ) कहा जाता है।
घोषणा
सी प्रोग्रामिंग में पॉइंटर्स टू स्ट्रक्चर्स के लिए घोषणा निम्नलिखित है -
struct tagname *ptr;
उदाहरण के लिए:स्ट्रक्चर स्टूडेंट *s;
एक्सेस करना
यह नीचे बताया गया है कि पॉइंटर्स को संरचनाओं तक कैसे पहुंचा जाए।
Ptr-> membername;
उदाहरण के लिए - s->sno, s->sname, s->marks;
उदाहरण
निम्नलिखित एक सी प्रोग्राम है जो सी प्रोग्रामिंग में संरचना के गतिशील स्मृति आवंटन की व्याख्या करता है -
#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
पॉइंटर्स और स्ट्रक्चर्स पर एक और उदाहरण पर विचार करें, जिसमें पॉइंटर्स और स्ट्रक्चर्स को प्रदर्शित करने के लिए एक सी प्रोग्राम दिया गया है।
#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