Professional Documents
Culture Documents
Unit Iv
Unit Iv
UNIT-IV
STRUCTURESStructure-Nestedstructures–PointerandStructures–Arrayofstructures–
ExampleProgramusingstructuresandpointers–Selfreferentialstructures–
Dynamicmemoryallocation-typedef
4.1 Structure
Arraysallowtodefinetypeofvariablesthatcanholdseveraldataitemsofthesamekind.Si
milarlystructureisanotheruserdefineddatatypeavailableinCthatallowstocombined
ataitemsofdifferentkinds.
Structures are used to represent a record. Suppose you want to keep track of
yourbooksinalibrary.Youmightwanttotrackthefollowingattributesabouteachbook
−
Title
Author
Subject
BookID
DefiningaStructure
Todefineastructure,youmustusethe struct
statement.Thestructstatementdefinesanewdatatype,withmorethanonemember.Thefor
matofthestructstatementisasfollows−
struct[structuretag]{
memberdefinition;member
definition;
...
memberdefinition;
}[oneormorestructurevariables];
Thestructuretagisoptionalandeachmemberdefinitionisanormalvariable
definition, such as int i; or float f; or any other valid variable definition. At the
endofthestructure'sdefinition,beforethefinalsemicolon,youcanspecifyoneormorest
ructure variables but it is optional. Here is the way you would declare the
Bookstructure−
structBooks
{chartitle[50];ch
arauthor[50];
charsubject[100];i
ntbook_id;
}book;
AccessingStructureMembers
To access any member of a structure, we use the member access operator (.).
Thememberaccess operatoris coded asaperiodbetweenthestructure
variablenameandthestructurememberthat we wish to access. You would use
thekeyword struct
todefinevariablesofstructuretype.Thefollowingexampleshowshowtouseastructureinap
rogram−
#include<stdio.h>#
include<string.h>
structBooks{ch
artitle[50];
charauthor[50];ch
arsubject[100];int
book_id;
};
intmain(){
structBooksBook1;s /*DeclareBook1oftypeBook*/
tructBooksBook2; /*DeclareBook2oftypeBook*/
/*book1specification*/
strcpy(Book1.title,"CProgramming");strcpy(B
ook1.author,"NuhaAli");
strcpy(Book1.subject,"CProgrammingTutorial");Bo
ok1.book_id=6495407;
/*book2specification*/
strcpy(Book2.title,"TelecomBilling");st
rcpy(Book2.author,"ZaraAli");
strcpy( Book2.subject,"Telecom
BillingTutorial");Book2.book_id=6495700;
/*printBook1info*/
printf("Book1title:%s\n",Book1.title);printf("B
ook1author:%s\n",Book1.author);printf("Book
1subject:%s\n",Book1.subject);
printf("Book1book_id:%d\n",Book1.book_id);
/*printBook2info*/
printf("Book2title:%s\n",Book2.title);printf("B
ook2author:%s\n",Book2.author);printf("Book
2subject:%s\n",Book2.subject);
printf("Book2book_id:%d\n",Book2.book_id);
return0;
}
Whentheabovecodeiscompiledandexecuted,itproducesthefollowingresult−
Book1title:CProgrammingB
ook1author:NuhaAli
Book1subject:CProgrammingTutorialBo
ok1book_id :6495407
Book2title:TelecomBillingBoo
k2author:ZaraAli
Book2subject:TelecomBillingTutorialBoo
k2book_id:6495700
4.2 NestedStructure
When a structure contains anotherstructure, itis called nested structure.
Forexample,we have two structures named Address and Employee. To make
AddressnestedtoEmployee,wehavetodefineAddressstructurebeforeandoutside
EmployeestructureandcreateanobjectofAddressstructureinsideEmployeestructure.
Syntaxforstructurewithinstructureornestedstructure
structstructure1
{
----------
----------
};
structstructure2
{
----------
----------
struct structure1obj;
};
Exampleforstructurewithinstructureornestedstructure
#include<stdio.h>
structAddress
{
charHouseNo[25];char
City[25];
charPinCode[25];
};
structEmployee
{
int Id;
charName[25];fl
oatSalary;
structAddressAdd;
};
voidmain()
{
inti;
structEmployeeE;
printf("\n\tEnterEmployeeId:");scanf("%d"
,&E.Id);
printf("\n\tEnterEmployeeName:");scanf("
%s",&E.Name);
printf("\n\tEnterEmployeeSalary:");scanf("
%f",&E.Salary);
printf("\n\tEnterEmployeeHouseNo:");sc
anf("%s",&E.Add.HouseNo);
printf("\n\tEnterEmployeeCity:");s
canf("%s",&E.Add.City);
printf("\n\tEnterEmployeeHouseNo:");sc
anf("%s",&E.Add.PinCode);
printf("\nDetailsofEmployees");printf("\n\
tEmployeeId:%d",E.Id);printf("\n\tEmploy
ee Name :
%s",E.Name);printf("\n\tEmployeeSalary:
%f",E.Salary);
printf("\n\tEmployeeHouseNo:%s",E.Add.HouseNo);printf("\n\t
EmployeeCity:%s",E.Add.City);printf("\n\tEmployeeHouseNo:%s
",E.Add.PinCode);
}
Output:
EnterEmployeeId:101
EnterEmployeeName:SureshEnterE
mployeeSalary:45000EnterEmployee
HouseNo:4598/DEnterEmployeeCity
:Delhi
EnterEmployeePinCode:110056
DetailsofEmployeesEmployee
Id:101EmployeeName:Su
reshEmployeeSalary:450
00
EmployeeHouseNo:4598/DE
mployeeCity:DelhiEmployeeP
inCode:110056
4.3 PointerandStructures
Structures
canbecreatedandaccessedusingpointers.Apointervariableofastructurecanbecreatedasbe
low:
St.Joseph’s Institute of Technology 4
CS4206 Commonto CSE,IT, ADS ProgramminginC
structname{
member1;
member2;
.
.
};
intmain()
{
structname*ptr;
}
Here,thepointervariableoftypestructnameiscreated.
Accessingstructure'smemberthroughpointer
Astructure'smembercanbeaccesssedthroughpointerintwoways:
1. Referencingpointertoanotheraddresstoaccessmemory
2. Usingdynamicmemoryallocation
1. Referencingpointertoanotheraddresstoaccessthememory
Consideranexampletoaccessstructure'smemberthroughpointer.
#include<stdio.h>typ
edefstructperson
{
intage;
floatweight;
};
intmain()
{
structperson*personPtr,person1;
personPtr=&person1;
//Referencingpointertomemoryaddressofpers
on1
printf("Enterinteger:");scanf("%d",&(*personPtr).age);
printf("Enternumber:");scanf("%f",&(*personPtr).weig
ht);
printf("Displaying:");printf("%d%f",(*personPtr).age,(*
personPtr).weight);
return0;
}
Inthisexample,thepointervariableoftype structperson isreferencedtotheaddressof
person1.Then,onlythestructurememberthroughpointercancanaccessed.
Using->operatortoaccessstructurepointermember
Structurepointermembercanalsobeaccessedusing->operator.
(*personPtr).ageissameaspersonPtr->age
(*personPtr).weightissameaspersonPtr->weight
2. Accessingstructurememberthroughpointerusingdynamicmemoryallocation
Toaccessstructurememberusingpointers,memorycanbeallocateddynamicallyusing
malloc()functiondefinedunder"stdlib.h"headerfile.
Syntaxtousemalloc()
ptr=(cast-type*)malloc(byte-size)
Exampletousestructure'smemberthroughpointerusingmalloc()function.
#include
<stdio.h>#include
<stdlib.h>structpers
on{
intage;
float
weight;charna
me[30];
};
intmain()
{
structperson*ptr;i
nti,num;
printf("Enternumberofpersons:");sc
anf("%d",&num);
ptr=(structperson*)malloc(num*sizeof(structperson));
//Abovestatement allocatesthememory
fornstructureswithpointerpersonPtrpointingtobaseaddress*/
for(i=0;i<num;++i)
{
printf("Enter name, age and weight of the person
respectively:\n");scanf("%s%d%f",&(ptr+i)->name,&(ptr+i)->age,&(ptr+i)-
>weight);
}
printf("DisplayingInfromation:\n");f
or(i=0;i<num;++i)
printf("%s\t%d\t%.2f\n",(ptr+i)->name,(ptr+i)->age,(ptr+i)->weight);
Output
return0;
}Enternumberofpersons:2
Entername,ageandweightofthepersonrespectively:Ad
am
2
3.2
Entername,ageandweightofthepersonrespectively:
Eve
6
2.3
DisplayingInformation:A
dam 2 3.20
Eve 6 2.30
4.4 ArrayofStructure
StructureisusedtostoretheinformationofOneparticularobjectbutifweneedtostoresuch10
0objectsthen Array ofStructureis used.
Example:
structBookinfo
{
char[20]bname;
intpages;
intprice;
}Book[100];
Explanation:
1. HereBookstructureisusedtoStoretheinformationofoneBook.
2. IncaseifweneedtostoretheInformationof100booksthenArrayofStructureisuse
d.
3. b1[0] stores the Information of 1st Book , b1[1] stores the information of
2ndBook and So onWecan storethe informationof100books.
ExampleProgramForArrayOfStructuresInC:
This program is used to store and access “id, name and percentage” for 3
students.Structure array is used in this program to store and display records for
manystudents. You can store “n” number of students record by declaring
structurevariableas‘structstudentrecord[n]“,wherencanbe1000or5000etc.
Program:
#include<stdio.h>#
include<string.h>
structstudent
{
intid;
charname[30];float
percentage;
};
intmain()
{
inti;
structstudentrecord[2];
//1ststudent's
recordrecord[0].id=1;strcpy(record[0
].name,"Raju");record[0].percentage=
86.5;
//2ndstudent'srecordrecord[1].id=2
;strcpy(record[1].name,"Surendren");r
ecord[1].percentage=90.5;
//3rdstudent'srecordrecord[2].id=3;
strcpy(record[2].name,"Thiyagu");rec
ord[2].percentage=81.5;
for(i=0;i<3;i++)
{
printf("
RecordsofSTUDENT:%d\n",i+1);print
f("Idis:%d\n",record[i].id);
printf("Nameis:%s\n",record[i].name);
printf("Percentageis:%f\n\n",record[i].percentage);
}
return0;
}
OUTPUT:
Records of STUDENT : 1
IdName is: 1
is: Raju
Percentageis:86.500000
Records of STUDENT : 2
IdNam is: 2
e is: Surendren
Percentageis:90.500000
Records of STUDENT : 3
Id is: 3
Name is:
ThiyaguPercentageis:81.5000
00
ExampleProgramForDeclaringManyStructureVariableInC:
In this program, two structure variables “record1″ and“record2″aredeclaredforsame
structure and different values
areassignedforbothstructurevariables.Separatememoryisallocatedforbothstructurevari
Program:
ablestostorethedata.
#include<stdio.h>#
include<string.h>
structstudent
{
intid;
charname[30];float
percentage;
};
intmain()
{
inti;
structstudentrecord1={1,"Raju",90.5};stru
ctstudentrecord2={2,"Mani",93.5};
printf("RecordsofSTUDENT1:\n");printf("
Idis:%d\n",record1.id);printf("Nameis:%s
\n",record1.name);
printf("Percentageis:%f\n\n",record1.percentage);
printf("RecordsofSTUDENT2:\n");printf("
Idis:%d\n",record2.id);printf("Nameis:%s
\n",record2.name);
printf("Percentageis:%f\n\n",record2.percentage);
return0;
}
OUTPUT:
Records of STUDENT1:
IdName is: 1
Percentage is: Raju
RecordsId is: 90.500000S
Name of TUDENT2:
is: 2
is: Mani
Percentageis:93.500000
4.5 ExampleProgramusingstructuresandpointers
ExampleProgramForCStructureUsingPointer:
Inthisprogram,“record1”isnormalstructurevariableand“ptr”ispointerstructurevaria
ble. As you know, Dot(.) operator is used to access the data using
normalstructurevariableandarrow(->)isusedtoaccessdatausingpointervariable.
Program:
#include<stdio.h>#
include<string.h>
structstudent
{
intid;
charname[30];float
percentage;
};
intmain()
{
inti;
structstudentrecord1={1,"Raju",90.5};str
uctstudent*ptr;
ptr=&record1;
printf("RecordsofSTUDENT1:\n");prin
tf("Idis:%d\n",ptr-
>id);printf("Nameis:%s\n",ptr-
>name);
printf("Percentageis:%f\n\n",ptr->percentage);
return0;
}
OUTPUT:
Records of STUDENT1:
Id is: 1
Name is:
RajuPercentageis:90.50000
0
ExampleProgramToCopyAStructureInC:
TherearemanymethodstocopyonestructuretoanotherstructureinC.
1. Wecancopyusingdirectassignmentofonestructuretoanotherstructureor
2. wecanuseCinbuiltfunction“memcpy()”or
3. wecancopybyindividualstructuremembers.
Program:
4. #include<stdio.h>
5. #include
<string.h>6.
7.struct
student8.{
9. int id;
10. charname[30];
11. floatpercentage;
12.};
13.
14.intmain()
15.{
16. inti;
17. structstudentrecord1={1,"Raju",90.5};
18. structstudentrecord2,*record3,*ptr1,record4;19.
20. printf("RecordsofSTUDENT1-record1structure\n");
21. printf("Id:%d\nName:%s\nPercentage:%f\n",
22. record1.id,record1.name,record1.percentage);2
3.
24. //1stmethodtocopywholestructuretoanotherstructure
25. record2=record1;
26.
27. printf("\nRecordsofSTUDENT1-Directcopyfrom"\
28. "record1\n");
29. printf("Id:%d\nName:%s\nPercentage:%f\n",
30. record2.id,record2.name,record2.percentage);3
1.
32. //2ndmethodtocopyusingmemcpyfunction
33. ptr1=&record1;
34. memcpy(record3,ptr1,sizeof(record1));3
5.
36. printf("\nRecordsofSTUDENT1 -copiedfromrecord1"\
37. "usingmemcpy \n");
38. printf("Id:%d\nName:%s\nPercentage:%f\n",
39. record3->id,record3->name,record3-
>percentage);40.
41. //3rdmethodtocopybyindividualmembers
42. printf("\nRecordsofSTUDENT1-Copiedindividual"\
43. "membersfromrecord1\n");
44. record4.id=record1.id;
45. strcpy(record4.name,record1.name);
46. record4.percentage=record1.percentage;4
7.
48. printf("Id:%d\nName:%s\nPercentage:%f\n",
49. record4.id,record4.name,record4.percentage);5
0.
51. return0;
52.}
OUTPUT:
Records of STUDENT1 –record1 structure
Id : 1
Name : Raju
Percentage : 90.500000
RecordsofSTUDENT1–Directcopyfromrecord1
Id : 1
Name : Raju
Percentage : 90.500000
Records of STUDENT1–
copiedfromrecord1usingmemcpy
Id : 1
Name : Raju
Percentage : 90.500000
Records of STUDENT1 –Copied
individualmembers
from record1
Id : 1
Name :
RajuPercentage:90.50000
4.6 Selfreferentialstructures
0
Considerthestructuredeclarationbelow,
structNODE{
structNODEnew;
/*'new'declaredvariable*/i
ntvalue;
};
Asweknowthatstructuretemplatetellscompilerhowtoallocatestoragetoits
membersandmakescomputernottoallocatememorytothem.Whencompilerreachesth
eline
structNODEnew;
St.Joseph’s Institute of Technology 11
CS4206 Commonto CSE,IT, ADS ProgramminginC
templatestructNODEisnotfullydefined.Further,its member‘new’of
typestructNODEcontainsamember‘new’oftypestructNODEwhichinturncontainsamembe
r ‘new’ again of type struct NODE and so on indefinitely. In such an instance,compiler
can’t evaluate correctly how much storage to allocate to ‘new’ member
oftemplatestructNODE.SoweobservedherethatamemberofstructNODEcan’tbea variable
of type struct NODE. Then, how can we make structure struct NODE self-
referential?Let’stakeonemoretry,thistimewedeclarea‘pointer-to-structNODE’
as amemberoftemplatestructNODE,
structNODE{
structNODE*new; /*'new'apointer-to-
structNODE*/intvalue;
};
AscompilerstartscompilingthetemplatestructNODEandreachesline
structNODE*new;
itfinds‘new’,a‘pointer-to-
structNODE’,andalsomemberofstructNODEtemplate,itevaluatescorrectlyhowmuchbytes
ofstoragetobeallocated to‘new’.
Onlinuxsystem,anypointertypetakes8bytesofstorage.
There’snoprobleminusing‘pointer-to-
structNODE’asamemberofstructNODE.Because‘new’isa‘pointer-to-
structNODE’,structurestructNODEiscalledself-referential
structure.
typedefstructNODE{
structNODE*new;i
ntvalue;
}Node;
intmain(void)
{
Nodeprevious,current;
/*accessingmembersof'previous'*/pr
evious.new=¤t;
/* previous.new is a 'pointer-to-struct NODE'
*/previous.value=100;
}
4.7 DynamicMemoryAllocation
The C programming language manages memory statically, automatically,or
dynamically.Staticvariablesareallocatedinmainmemory,usuallyalongwiththe
executable code of the program, and persist for the lifetime of the
program;automatic variables are allocated on the stack and come and go as
functions arecalled and return. For static and automatic variables, the size of the
allocation mustbecompile-timeconstant(exceptforthecaseofvariable-
lengthautomaticarrays).Iftherequiredsizeisnotknownuntilrun-time(for
example,ifdataofarbitrarysizeisbeing read from the user or from a disk file), then
using fixed-size data objects isinadequate.
Thelifetimeofallocatedmemorycanalsocauseconcern.Neitherstatic-norautomatic
memory is adequate for all situations. Automatic-allocated data
cannotpersistacrossmultiplefunctioncalls,whilestaticdatapersistsforthelifeofthe
programwhetheritisneededornot.Inmanysituationstheprogrammerrequiresgreaterflexi
bilityinmanagingthelifetimeofallocatedmemory.
Theselimitationsareavoidedbyusingdynamicmemoryallocationinwhichmemoryismoree
xplicitlyandmoreflexiblymanaged,typically,byallocatingit
fromthefreestore(informallycalledthe"heap").InC,thelibraryfunction malloc is
usedtoallocateablockofmemoryontheheap.Theprogramaccessesthisblockof
memoryviaapointer malloc returns.Whenthememoryisnolongerneeded,whichdea
thatthepointeris free llocatesthememorysothatitcanbeusedfor
passedtootherpurposes.
Someplatformsprovidelibrarycallswhichallowrun-timedynamicallocationfrom
theCstackratherthantheheap(e.g.alloca()).Thismemoryisautomaticallyfreedwhenthecall
ingfunctionends.
Dynamicmemoryallocationallowsyourprogramtoobtainmorememoryspacewhile
running,ortoreleaseitif it'snotrequired.Insimpleterms,Dynamicmemory
allocation allows you to manually handle memory space for your
program.InCthereare4libraryfunctionsunder"stdlib.h"fordynamicmemoryallocation
.
Function UseofFunction
Allocatesrequestedsizeofbytesandreturnsapointerfirstbyteofallocatedspa
malloc()
ce
Allocatesspaceforanarrayelements,initializestozeroandthenreturnsapointert
calloc()
omemory
free() deallocatethepreviouslyallocatedspace
realloc() Changethesizeofpreviouslyallocatedspace
malloc()
Thenamemallocstandsfor"memoryallocation".
Thefunctionmalloc()reservesablockofmemoryofspecifiedsizeandreturnapointeroftypev
oidwhichcanbecastedintopointerofanyform.
Syntaxofmalloc()
ptr=(cast-type*)malloc(byte-size)
Here,ptrispointerofcast-
type.Themalloc()functionreturnsapointertoanareaofmemory with size of byte size.
If the space is insufficient, allocation fails and returnsNULLpointer.
Example:
ptr=(int*)malloc(100*sizeof(int));
Thisstatementwillallocateeither200or400accordingtosizeofint2or4bytes
respectivelyandthepointerpointstotheaddressoffirstbyteofmemory.
calloc()
Thenamecallocstandsfor"contiguousallocation".
St.Joseph’s Institute of Technology 13
CS4206 Commonto CSE,IT, ADS ProgramminginC
The only difference between malloc() and calloc() is that, malloc() allocates
singleblock of memory whereas calloc() allocates multiple blocks of memory each
of samesizeandsetsallbytestozero.
Syntaxofcalloc()
ptr=(cast-type*)calloc(n,element-size);
Thisstatementwillallocatecontiguousspaceinmemoryforanarrayofnelements.
Forexample:
ptr=(float*)calloc(25,sizeof(float));
Thisstatementallocatescontiguousspaceinmemoryforanarrayof25elements
eachofsizeoffloat,i.e,4bytes.
free()
Dynamicallyallocatedmemorycreatedwitheithercalloc()ormalloc()doesn'tgetfreed
onitsown.Youmust explicitlyusefree()toreleasethe space.
syntaxoffree()
free(ptr);
Thisstatementfreesthespaceallocatedinthememorypointedbyptr.
Example:ForCmalloc()andfree()S
umofElementinanarray
#include<stdio.h>
#include<stdlib.h>
intmain()
{
int num, i, *ptr,sum= 0;
printf("EnternumberofelementsintheArray:");scanf("%
d",&num);
ptr=(int*)malloc(num*sizeof(int));if(
ptr==NULL)
{
printf("Error!Unabletoallocatememory.");exi
t(0);
}
printf("Enterelementsofarray:");fo
r(i=0;i<num;++i)
{
scanf("%d",ptr+i);
}
for(i=0;i<num;++i)
{
sum+=*(ptr+i);
}
printf("SumofElementsinthegivenarrayis:%d",sum);free(ptr);
return0;
}
Output:
Herenumberofelementinthearrayisreadfromuserattheruntime.Arrayofsizenisallocat
edinmemoryusingmalloc()function.
Example:forCcalloc()andfree()S
umofElementinanarray
#include<stdio.h>
#include<stdlib.h>
intmain()
{
int num, i, *ptr,sum= 0;
printf("EnternumberofelementsintheArray:");scanf("%
d",&num);
ptr=(int*)calloc(num,sizeof(int));if(
ptr==NULL)
{
printf("Error!Unabletoallocatememory.");exi
t(0);
}
printf("Enterelementsofarray:");fo
r(i=0;i<num;++i)
{
scanf("%d",ptr+i);
}
for(i=0;i<num;++i)
{
sum+=*(ptr+i);
}
printf("SumofElementsinthegivenarrayis:%d",sum);free(ptr);
return0;
}
Output:
Aboveprogramalsodothesameprocessthatwasperformedinpreviousprogram.Onlydiffere
nsisinsteadofusingmalloc()functionherecalloc()functionisused.
realloc()
Ifthepreviouslyallocatedmemoryisinsufficientormorethanrequired,youcanchangethepr
eviously allocatedmemorysize usingrealloc().
Syntaxofrealloc()
ptr=realloc(ptr,newsize);
Here,ptrisreallocatedwithsizeofnewsize.
Example:forrealloc()
#include<stdio.h>
#include<stdlib.h>
intmain()
{
intnum, num2,i,*ptr, sum= 0;
printf("EnternumberofelementsintheArray:");scanf("%
d",&num);
ptr=(int*)calloc(num,sizeof(int));if(
ptr==NULL)
{
printf("Error!Unabletoallocatememory.");exi
t(0);
}
printf("Enterelementsofarray:");fo
r(i=0;i<num;++i)
{
scanf("%d",ptr+i);
}
for(i=0;i<num;++i)
{
sum+=*(ptr+i);
}
printf("SumofElementsinthegivenarrayis:%d",sum);printf("\n
Wanttoaddmoreelementinarray!");printf("\nEnternumberofNe
welementsintheArray:");scanf("%d",&num2);
ptr=realloc(ptr,num2);if
(ptr==NULL)
{
printf("Error!Unabletoallocatememory.");exit(0);
}
printf("\nEnterNewelementsofarray:");for(i=n
um;i<num+num2;++i)
{
scanf("%d",ptr+i);
}
sum=0;
for(i=0;i<num+num2;++i)
{
sum+=*(ptr+i);
}
printf("\nSum of all Elements in the given array is : %d",
sum);free(ptr);
return0;
}
Output:
Hererealloc()functionisusedtoreallocatethesizeofthearray,thatwascr
eatedusingcalloc()functiontoaddextraelementsinthearray.
4.8 Typedef
typedef is a keyword used in C language to assign alternative names to
existingtypes. Its mostly used with user defined data types, when names of data
types getslightlycomplicated.Followingisthegeneral syntaxforusingtypedef,
typedefexisting_namealias_name
Letstakeanexampleandseehowtypedefactuallyworks.
typedefunsignedlongulong;
The above statement define a termulongfor an unsigned long type.
Nowthisulongidentifiercanbeusedtodefine unsignedlongtypevariables.
ulongi,j;
typedefinuserdefineddatatype
typedefcanbeusedtogiveanametouserdefineddatatypeaswell.Letsseeitsusewithstructur
es.
typedefstruct
{
type
member1;type
member2;type
member3;
Heretype_namerepresents
}type_name; the stucture definition associated with it. Now
thistype_namecanbeusedtodeclareavariableofthisstucturetype.
type_namet1,t2;
Example:#include
<stdio.h>#include
<conio.h>#include
<string.h>
typedefstructstudent
{
charname[50];i
ntmark;
}stud;
voidmain()
{
studs;
printf("\nEnterStudentDetail\n");p
rintf("\nStudentname\t");scanf("%
s",s.name);printf("\nEnterStudent
Mark\t");scanf("%d",&s.mark);
printf("\nStudentnameis:%s",s.name);printf("\nStudent
Markis:%d",s.mark);
getch();
}
Output:
typedefandPointers
typedef can be used to give an alias name to pointers also. Here we have a case
inwhichuseoftypedefisbeneficialduringpointerdeclaration.
InPointers*bindstotherightandnottheleft.
int*x,y;
Bythisdeclarationstatement,weareactuallydeclaring x
asapointeroftypeint,whereasywillbedeclaredasaplaininteger.
typedefint*IntPtr;
IntPtrx,y,z;
Butifweusetypedeflikeinaboveexample,wecandeclareanynumberofpointers
inasinglestatement.