C structure can be accessed in 2 ways in a C program. They are,
- Using normal structure variable
- Using pointer variable
Dot(.) operator is used to access the data using normal structure variable and arrow (->) is used to access the data using pointer variable.
Pointers can be accessed along with structures. A pointer variable of structure can be created as below:
struct name { member1; member2; . . }; -------- Inside function ------- struct name *ptr;
Here, the pointer variable of type
struct name
is created.Structure's member through pointer can be used in two ways:
- Referencing pointer to another address to access memory
- Using dynamic memory allocation
#include <stdio.h>
struct name{
int a;
float b;
};
int main(){
struct name *ptr,p;
ptr=&p; /* Referencing pointer to memory address of p */
printf("Enter integer: ");
scanf("%d",&(*ptr).a);
printf("Enter number: ");
scanf("%f",&(*ptr).b);
printf("Displaying: ");
printf("%d%f",(*ptr).a,(*ptr).b);
return 0;
}
In this example, the pointer variable of type
struct name
is referenced to the address of p. Then, only the structure member through pointer can can accessed.Structure pointer member can also be accessed using
->
operator.(*ptr).a is same as ptr->a (*ptr).b is same as ptr->b
Accessing structure member through pointer using dynamic memory allocation
To access structure member using pointers, memory can be allocated dynamically using malloc() function defined under"stdlib.h"
header file.Syntax to use malloc()
ptr=(cast-type*)malloc(byte-size)
Example to use structure's member through pointer using malloc() function.
#include <stdio.h>
#include<stdlib.h>
struct name {
int a;
float b;
char c[30];
};
int main(){
struct name *ptr;
int i,n;
printf("Enter n: ");
scanf("%d",&n);
ptr=(struct name*)malloc(n*sizeof(struct name));
/* Above statement allocates the memory for n structures with pointer ptr pointing to base address */
for(i=0;i<n;++i){
printf("Enter string, integer and floating number respectively:\n");
scanf("%s%d%f",&(ptr+i)->c,&(ptr+i)->a,&(ptr+i)->b);
}
printf("Displaying Infromation:\n");
for(i=0;i<n;++i)
printf("%s\t%d\t%.2f\n",(ptr+i)->c,(ptr+i)->a,(ptr+i)->b);
return 0;
}
OutputEnter n: 2 Enter string, integer and floating number respectively: Programming 2 3.2 Enter string, integer and floating number respectively: Structure 6 2.3 Displaying Information Programming 2 3.20 Structure 6 2.30
Example program for C structure using pointer:
In this program, “record1″ is normal structure variable and “ptr” is pointer structure variable. As you know, Dot(.) operator is used to access the data using normal structure variable and arrow(->) is used to access data using pointer variable.#include <stdio.h>
#include <string.h>
struct student
{
int id;
char name[30];
float percentage;
};
int main()
{
int i;
struct student record1 = {1, "Raju", 90.5};
struct student *ptr;
ptr = &record1;
printf("Records of STUDENT1: \n");
printf(" Id is: %d \n", ptr->id);
printf(" Name is: %s \n", ptr->name);
printf(" Percentage is: %f \n\n", ptr->percentage);
return 0;
}
Output:
Records of STUDENT1: Id is: 1 Name is: Raju Percentage is: 90.500000 |
Example program to copy a structure in C:
There are many methods to copy one structure to another structure in C.- We can copy using direct assignment of one structure to another structure or
- we can use C inbuilt function “memcpy()” or
- we can copy by individual structure members.
#include <string.h>
struct student
{
int id;
char name[30];
float percentage;
};
int main()
{
int i;
struct student record1 = {1, "Raju", 90.5};
struct student record2, *record3, *ptr1, record4;
printf("Records of STUDENT1 - record1 structure \n");
printf(" Id : %d \n Name : %s\n Percentage : %f\n",
record1.id, record1.name, record1.percentage);
// 1st method to copy whole structure to another structure
record2=record1;
printf("\nRecords of STUDENT1 - Direct copy from " \
"record1 \n");
printf(" Id : %d \n Name : %s\n Percentage : %f\n",
record2.id, record2.name, record2.percentage);
// 2nd method to copy using memcpy function
ptr1 = &record1;
memcpy(record3, ptr1, sizeof(record1));
printf("\nRecords of STUDENT1 - copied from record1 " \
"using memcpy \n");
printf(" Id : %d \n Name : %s\n Percentage : %f\n",
record3->id, record3->name, record3->percentage);
// 3rd method to copy by individual members
printf("\nRecords of STUDENT1 - Copied individual " \
"members from record1 \n");
record4.id=record1.id;
strcpy(record4.name, record1.name);
record4.percentage = record1.percentage;
printf(" Id : %d \n Name : %s\n Percentage : %f\n",
record4.id, record4.name, record4.percentage);
return 0;
}
Output:
Records of STUDENT1 - record1 structureId : 1
Name : Raju
Percentage : 90.500000 Records of STUDENT1 – Direct copy from record1
Id : 1
Name : Raju
Percentage : 90.500000
Records of STUDENT1 – copied from record1 using memcpy
Id : 1
Name : Raju
Percentage : 90.500000
Records of STUDENT1 – Copied individual members from record1
Id : 1
Name : Raju
Percentage : 90.500000
No comments:
Post a Comment