SlideShare a Scribd company logo
Unit-5
Pointer, Structure, Union
&
Intro to File Handling
Course: BCA
Subject: Programming In C Language
What is a pointer
• In a generic sense, a “pointer” is anything that tells usIn a generic sense, a “pointer” is anything that tells us
where something can be found.where something can be found.
– Addresses in the phone book
– URLs for webpages
– Road signs
Java Reference
• In Java, the name of an object is a reference to that object.In Java, the name of an object is a reference to that object.
HereHere ford is a reference to a Truck object. It contains theis a reference to a Truck object. It contains the
memory address at which the Truck object is stored.memory address at which the Truck object is stored.
Truck ford = new Truck( );
• The syntax for using the reference is pretty simple. JustThe syntax for using the reference is pretty simple. Just
use the “dot” notation.use the “dot” notation.
ford.start( );
ford.drive( 23 );
ford.turn (LEFT);
What is a pointer ?
• In C, a pointer variable (or just “pointer”) is similar toIn C, a pointer variable (or just “pointer”) is similar to
a reference in Java except thata reference in Java except that
– A pointer can contain the memory address of any variable
type (Java references only refer to objects)
– A primitive (int, char, float)
– An array
– A struct or union
– Dynamically allocated memory
– Another pointer
– A function
– There’s a lot of syntax required to create and use pointers
Why Pointers?
• They allow you to refer to large data structures in a compactThey allow you to refer to large data structures in a compact
wayway
• They facilitate sharing between different parts of programsThey facilitate sharing between different parts of programs
• They make it possible to get new memory dynamically as yourThey make it possible to get new memory dynamically as your
program is runningprogram is running
• They make it easy to represent relationships among data items.They make it easy to represent relationships among data items.
Pointer Caution
• They are a powerful low-level device.They are a powerful low-level device.
• Undisciplined use can be confusing and thus theUndisciplined use can be confusing and thus the
source of subtle, hard-to-find bugs.source of subtle, hard-to-find bugs.
– Program crashes
– Memory leaks
– Unpredictable results
C Pointer Variables
To declare a pointer variable, we must do two thingsTo declare a pointer variable, we must do two things
– Use the “*” (star) character to indicate that the variable being
defined is a pointer type.
– Indicate the type of variable to which the pointer will point
(the pointee). This is necessary because C provides
operations on pointers (e.g., *, ++, etc) whose meaning
depends on the type of the pointee.
• General declaration of a pointerGeneral declaration of a pointer
type *nameOfPointer;
Pointer Declaration
The declarationThe declaration
int *intPtr;
defines the variabledefines the variable intPtr to be a pointer to a variable of typeto be a pointer to a variable of type
int.. intPtr will contain the memory address of somewill contain the memory address of some int
variable orvariable or int array. Read this declaration asarray. Read this declaration as
– “intPtr is a pointer to an int”, or equivalently
– “*intPtr is an int”
Caution -- Be careful when defining multiple variables on the sameCaution -- Be careful when defining multiple variables on the same
line. In this definitionline. In this definition
int *intPtr, intPtr2;
intPtr is a pointer to an int, but intPtr2 is not!
Pointer Operators
The two primary operators used with pointers areThe two primary operators used with pointers are
* (star) and(star) and && (ampersand)(ampersand)
– The * operator is used to define pointer variables and to
deference a pointer. “Dereferencing” a pointer means to use
the value of the pointee.
– The & operator gives the address of a variable.
Recall the use of & in scanf( )
Pointer Examples
int x = 1, y = 2, z[10];
int *ip; /* ip is a pointer to an int */
ip = &x; /* ip points to (contains the memory address of) x */
y = *ip; /* y is now 1, indirectly copied from x using ip */
*ip = 0; /* x is now 0 */
ip = &z[5]; /* ip now points to z[5] */
If ip points to x, then *ip can be used anywhere x can be used so in this
example *ip = *ip + 10; and x = x + 10; are equivalent
The * and & operators bind more tightly than arithmetic operators so
y = *ip + 1; takes the value of the variable to which ip points, adds 1
and assigns it to y
Similarly, the statements *ip += 1; and ++*ip; and (*ip)++; all increment
the variable to which ip points. (Note that the parenthesis are
necessary in the last statement; without them, the expression would
increment ip rather than what it points to since operators like * and
++ associate from right to left.)
Pointer and Variable types
• The type of a pointer and its pointee must matchThe type of a pointer and its pointee must match
int a = 42;
int *ip;
double d = 6.34;
double *dp;
ip = &a; /* ok -- types match */
dp = &d; /* ok */
ip = &d; /* compiler error -- type mismatch */
dp = &a; /* compiler error */
More Pointer Code
• Use ampersand (Use ampersand ( & ) to obtain the address of the pointee) to obtain the address of the pointee
• Use star (Use star ( * ) to get / change the value of the pointee) to get / change the value of the pointee
• UseUse %p to print the value of a pointer withto print the value of a pointer with printf( )
• What is the output from this code?What is the output from this code?
int a = 1, *ptr1;
/* show value and address of a
** and value of the pointer */
ptr1 = &a ;
printf("a = %d, &a = %p, ptr1 = %p, *ptr1 = %dn",
a, &a, ptr1, *ptr1) ;
/* change the value of a by dereferencing ptr1
** then print again */
*ptr1 = 35 ;
printf(“a = %d, &a = %p, ptr1 = %p, *ptr1 = %dn",
a, &a, ptr1, *ptr1) ;
NULL
• NULL is a special value which may be assigned to a pointerNULL is a special value which may be assigned to a pointer
• NULL indicates that this pointer does not point to any variableNULL indicates that this pointer does not point to any variable
(there is no pointee)(there is no pointee)
• Often used when pointers are declaredOften used when pointers are declared
int *pInt = NULL;
• Often used as the return type of functions that return a pointer toOften used as the return type of functions that return a pointer to
indicate function failureindicate function failure
int *myPtr;
myPtr = myFunction( );
if (myPtr == NULL){
/* something bad happened */
}
• Dereferencing a pointer whose value is NULL will result inDereferencing a pointer whose value is NULL will result in
program terminationprogram termination..
Pointers and Function Arguments
• Since C passes all primitive function arguments “by value” thereSince C passes all primitive function arguments “by value” there
is no direct way for a function to alter a variable in the callingis no direct way for a function to alter a variable in the calling
code.code.
• This version of theThis version of the swap function doesn’t work.function doesn’t work. WHY NOT?WHY NOT?
/* calling swap from somewhere in main() */
int x = 42, y = 17;
Swap( x, y );
/* wrong version of swap */
void Swap (int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
A better swap( )
• The desired effect can be obtained by passing pointers to theThe desired effect can be obtained by passing pointers to the
values to be exchanged.values to be exchanged.
• This is a very common use of pointers.This is a very common use of pointers.
/* calling swap from somewhere in main( ) */
int x = 42, y = 17;
Swap( &x, &y );
/* correct version of swap */
void Swap (int *px, int *py)
{
int temp;
temp = *px;
*px = *py;
*py = temp;
}
More Pointer Function
Parameters
• Passing the address of variable(s) to a function canPassing the address of variable(s) to a function can
be used to have a function “return” multiple values.be used to have a function “return” multiple values.
• The pointer arguments point to variables in the callingThe pointer arguments point to variables in the calling
code which are changed (“returned”) by the function.code which are changed (“returned”) by the function.
ConvertTime.c
void ConvertTime (int time, int *pHours, int *pMins)
{
*pHours = time / 60;
*pMins = time % 60;
}
int main( )
{
int time, hours, minutes;
printf("Enter a time duration in minutes: ");
scanf ("%d", &time);
ConvertTime (time, &hours, &minutes);
printf("HH:MM format: %d:%02dn", hours, minutes);
return 0;
}
An Exercise
• What is the output from this code?What is the output from this code?
void F (int a, int *b)
{
a = 7 ;
*b = a ;
b = &a ;
*b = 4 ;
printf("%d, %dn", a, *b) ;
}
int main()
{
int m = 3, n = 5;
F(m, &n) ;
printf("%d, %dn", m, n) ;
return 0;
}
4, 4
3, 7
Pointers to struct
/* define a struct for related student data */
typedef struct student {
char name[50];
char major [20];
double gpa;
} STUDENT;
STUDENT bob = {"Bob Smith", "Math", 3.77};
STUDENT sally = {"Sally", "CSEE", 4.0};
STUDENT *pStudent; /* pStudent is a "pointer to struct student" */
/* make pStudent point to bob */
pStudent = &bob;
/* use -> to access the members */
printf ("Bob's name: %sn", pStudent->name);
printf ("Bob's gpa : %fn", pStudent->gpa);
/* make pStudent point to sally */
pStudent = &sally;
printf ("Sally's name: %sn", pStudent->name);
printf ("Sally's gpa: %fn", pStudent->gpa);
Note too that the following are equivalent. Why??
pStudent->gpa and (*pStudent).gpa /* the parentheses are necessary */
Pointer to struct for functions
void PrintStudent(STUDENT *studentp)
{
printf(“Name : %sn”, studentp->name);
printf(“Major: %sn”, studentp->major);
printf(“GPA : %4.2f”, studentp->gpa);
}
Passing a pointer to a struct to a function is more
efficient than passing the struct itself. Why is this
true?
References
1. www.tutorialspoint.com/cprogramming/c_pointers.htm
2. www.cprogramming.com/tutorial/c/lesson6.html
3. pw1.netcom.com/~tjensen/ptr/pointers.html
4. Programming in C by yashwant kanitkar
5.ANSI C by E.balagurusamy- TMG publication
6.Computer programming and Utilization by sanjay shah Mahajan Publication
7.www.cprogramming.com/books.html
8.en.wikipedia.org/wiki/C_(programming_language)

More Related Content

PPT
pointer, structure ,union and intro to file handling
PPT
Bsc cs 1 pic u-5 pointer, structure ,union and intro to file handling
PPT
Diploma ii cfpc- u-5.1 pointer, structure ,union and intro to file handling
PPT
Lap trinh C co ban va nang cao
PPT
Basics of pointer, pointer expressions, pointer to pointer and pointer in fun...
PDF
Lecturer23 pointersin c.ppt
PPT
Advanced pointers
pointer, structure ,union and intro to file handling
Bsc cs 1 pic u-5 pointer, structure ,union and intro to file handling
Diploma ii cfpc- u-5.1 pointer, structure ,union and intro to file handling
Lap trinh C co ban va nang cao
Basics of pointer, pointer expressions, pointer to pointer and pointer in fun...
Lecturer23 pointersin c.ppt
Advanced pointers

What's hot (19)

PPT
Practical Meta Programming
PPT
Pointers in c
PPTX
C programming - Pointer and DMA
PPTX
Pointers in C
PPT
PPTX
Pointer in c
PPT
Introduction to pointers and memory management in C
PPTX
PPTX
Dynamic Memory Allocation in C
PDF
Types of pointer in C
PPTX
Pointers in C Programming
PPTX
Advance topics of C language
PPT
Pointers (Pp Tminimizer)
PPTX
Pointers in c - Mohammad Salman
PPTX
Pointer in c program
PPT
Pointers
PPT
Advanced C programming
PPT
C pointers
Practical Meta Programming
Pointers in c
C programming - Pointer and DMA
Pointers in C
Pointer in c
Introduction to pointers and memory management in C
Dynamic Memory Allocation in C
Types of pointer in C
Pointers in C Programming
Advance topics of C language
Pointers (Pp Tminimizer)
Pointers in c - Mohammad Salman
Pointer in c program
Pointers
Advanced C programming
C pointers
Ad

Viewers also liked (20)

PPS
Dovanojimas
PPTX
Amy Kenton - The Gardner Theory of Multiple Intelligences
PPTX
The Groundbreaking Work of Educator Howard Gardner
PPTX
Academic, Cultural, Sports, Social, Clubs at Rai University, Ahmedabad-INDIA
PDF
The Truth about Electric Vehicles (EVs) in Hot Weather
PPS
Valentino diena
PPTX
How to Win Educational Grants
PPTX
Amy Kenton - The Charlotte Danielson Framework
PPT
B.sc cs-ii-u-2.1-overview of register transfer, micro operations and basic co...
PPT
B.tech. ii engineering chemistry unit 3 D plastics
PPS
PPTX
B sc micro, biotech, biochem i es u 3.1 ecosystem
PDF
Rai University, Ahmedabad (Gujarat) - Campus Rider Web Newsletter 2014
PDF
Smart Charging & the ChargeTO Pilot Slides from Webinar
PPS
Nenusimink2
PDF
The Truth About Electric Vehicles in Cold Weather
PDF
Maximizing the ROI of Fleet Electrification
PPT
Bba ii cam u iii-introduction to sdlc cycle
PPT
Mca i-u-4 central processing unit and pipeline
PPTX
B.tech i ecls_u-1.3_degree of comparison
Dovanojimas
Amy Kenton - The Gardner Theory of Multiple Intelligences
The Groundbreaking Work of Educator Howard Gardner
Academic, Cultural, Sports, Social, Clubs at Rai University, Ahmedabad-INDIA
The Truth about Electric Vehicles (EVs) in Hot Weather
Valentino diena
How to Win Educational Grants
Amy Kenton - The Charlotte Danielson Framework
B.sc cs-ii-u-2.1-overview of register transfer, micro operations and basic co...
B.tech. ii engineering chemistry unit 3 D plastics
B sc micro, biotech, biochem i es u 3.1 ecosystem
Rai University, Ahmedabad (Gujarat) - Campus Rider Web Newsletter 2014
Smart Charging & the ChargeTO Pilot Slides from Webinar
Nenusimink2
The Truth About Electric Vehicles in Cold Weather
Maximizing the ROI of Fleet Electrification
Bba ii cam u iii-introduction to sdlc cycle
Mca i-u-4 central processing unit and pipeline
B.tech i ecls_u-1.3_degree of comparison
Ad

Similar to pointer, structure ,union and intro to file handling (20)

PPT
btech-1picu-5pointerstructureunionandintrotofilehandling-150122010700-conver.ppt
PPTX
4 Pointers.pptx
PPTX
C Programming Unit-4
PDF
EASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdf
PDF
PSPC--UNIT-5.pdf
PPT
presentation_pointers_1444076066_140676 (1).ppt
PPT
c program.ppt
PPTX
Algoritmos e Estruturas de Dados - Pointers
PPT
pointers (1).ppt
PPTX
Pointers in c v5 12102017 1
PPTX
Pointers in c language
PDF
Pointers-Computer programming
PPTX
pointers.pptx
PPTX
Pointers and single &multi dimentionalarrays.pptx
PPTX
unit-7 Pointerdesfsdfsdgsdgaa notes.pptx
PPTX
Ponters
PPTX
Pointer in C and its significance, Relationship between pointers and memory a...
PPTX
Mca ii dfs u-2 array records and pointer
PPTX
Pointers
PPT
358 33 powerpoint-slides_3-pointers_chapter-3
btech-1picu-5pointerstructureunionandintrotofilehandling-150122010700-conver.ppt
4 Pointers.pptx
C Programming Unit-4
EASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdf
PSPC--UNIT-5.pdf
presentation_pointers_1444076066_140676 (1).ppt
c program.ppt
Algoritmos e Estruturas de Dados - Pointers
pointers (1).ppt
Pointers in c v5 12102017 1
Pointers in c language
Pointers-Computer programming
pointers.pptx
Pointers and single &multi dimentionalarrays.pptx
unit-7 Pointerdesfsdfsdgsdgaa notes.pptx
Ponters
Pointer in C and its significance, Relationship between pointers and memory a...
Mca ii dfs u-2 array records and pointer
Pointers
358 33 powerpoint-slides_3-pointers_chapter-3

More from Rai University (20)

PDF
Brochure Rai University
PPT
Mm unit 4point2
PPT
Mm unit 4point1
PPT
Mm unit 4point3
PPT
Mm unit 3point2
PPTX
Mm unit 3point1
PPTX
Mm unit 2point2
PPT
Mm unit 2 point 1
PPT
Mm unit 1point3
PPT
Mm unit 1point2
PPTX
Mm unit 1point1
DOCX
Bdft ii, tmt, unit-iii, dyeing & types of dyeing,
PPTX
Bsc agri 2 pae u-4.4 publicrevenue-presentation-130208082149-phpapp02
PPTX
Bsc agri 2 pae u-4.3 public expenditure
PPTX
Bsc agri 2 pae u-4.2 public finance
PPS
Bsc agri 2 pae u-4.1 introduction
PPT
Bsc agri 2 pae u-3.3 inflation
PPTX
Bsc agri 2 pae u-3.2 introduction to macro economics
PPTX
Bsc agri 2 pae u-3.1 marketstructure
PPTX
Bsc agri 2 pae u-3 perfect-competition
Brochure Rai University
Mm unit 4point2
Mm unit 4point1
Mm unit 4point3
Mm unit 3point2
Mm unit 3point1
Mm unit 2point2
Mm unit 2 point 1
Mm unit 1point3
Mm unit 1point2
Mm unit 1point1
Bdft ii, tmt, unit-iii, dyeing & types of dyeing,
Bsc agri 2 pae u-4.4 publicrevenue-presentation-130208082149-phpapp02
Bsc agri 2 pae u-4.3 public expenditure
Bsc agri 2 pae u-4.2 public finance
Bsc agri 2 pae u-4.1 introduction
Bsc agri 2 pae u-3.3 inflation
Bsc agri 2 pae u-3.2 introduction to macro economics
Bsc agri 2 pae u-3.1 marketstructure
Bsc agri 2 pae u-3 perfect-competition

Recently uploaded (20)

PDF
Weekly quiz Compilation Jan -July 25.pdf
PDF
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
DOC
Soft-furnishing-By-Architect-A.F.M.Mohiuddin-Akhand.doc
PPTX
Orientation - ARALprogram of Deped to the Parents.pptx
PPTX
Cell Types and Its function , kingdom of life
PPTX
202450812 BayCHI UCSC-SV 20250812 v17.pptx
PPTX
Final Presentation General Medicine 03-08-2024.pptx
PDF
A GUIDE TO GENETICS FOR UNDERGRADUATE MEDICAL STUDENTS
PDF
VCE English Exam - Section C Student Revision Booklet
PDF
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
PPTX
Introduction-to-Literarature-and-Literary-Studies-week-Prelim-coverage.pptx
PDF
A systematic review of self-coping strategies used by university students to ...
PDF
Chinmaya Tiranga quiz Grand Finale.pdf
PPTX
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
PDF
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
PPTX
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
PPTX
Pharma ospi slides which help in ospi learning
PDF
Complications of Minimal Access Surgery at WLH
PDF
O7-L3 Supply Chain Operations - ICLT Program
PDF
Yogi Goddess Pres Conference Studio Updates
Weekly quiz Compilation Jan -July 25.pdf
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
Soft-furnishing-By-Architect-A.F.M.Mohiuddin-Akhand.doc
Orientation - ARALprogram of Deped to the Parents.pptx
Cell Types and Its function , kingdom of life
202450812 BayCHI UCSC-SV 20250812 v17.pptx
Final Presentation General Medicine 03-08-2024.pptx
A GUIDE TO GENETICS FOR UNDERGRADUATE MEDICAL STUDENTS
VCE English Exam - Section C Student Revision Booklet
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
Introduction-to-Literarature-and-Literary-Studies-week-Prelim-coverage.pptx
A systematic review of self-coping strategies used by university students to ...
Chinmaya Tiranga quiz Grand Finale.pdf
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
Pharma ospi slides which help in ospi learning
Complications of Minimal Access Surgery at WLH
O7-L3 Supply Chain Operations - ICLT Program
Yogi Goddess Pres Conference Studio Updates

pointer, structure ,union and intro to file handling

  • 1. Unit-5 Pointer, Structure, Union & Intro to File Handling Course: BCA Subject: Programming In C Language
  • 2. What is a pointer • In a generic sense, a “pointer” is anything that tells usIn a generic sense, a “pointer” is anything that tells us where something can be found.where something can be found. – Addresses in the phone book – URLs for webpages – Road signs
  • 3. Java Reference • In Java, the name of an object is a reference to that object.In Java, the name of an object is a reference to that object. HereHere ford is a reference to a Truck object. It contains theis a reference to a Truck object. It contains the memory address at which the Truck object is stored.memory address at which the Truck object is stored. Truck ford = new Truck( ); • The syntax for using the reference is pretty simple. JustThe syntax for using the reference is pretty simple. Just use the “dot” notation.use the “dot” notation. ford.start( ); ford.drive( 23 ); ford.turn (LEFT);
  • 4. What is a pointer ? • In C, a pointer variable (or just “pointer”) is similar toIn C, a pointer variable (or just “pointer”) is similar to a reference in Java except thata reference in Java except that – A pointer can contain the memory address of any variable type (Java references only refer to objects) – A primitive (int, char, float) – An array – A struct or union – Dynamically allocated memory – Another pointer – A function – There’s a lot of syntax required to create and use pointers
  • 5. Why Pointers? • They allow you to refer to large data structures in a compactThey allow you to refer to large data structures in a compact wayway • They facilitate sharing between different parts of programsThey facilitate sharing between different parts of programs • They make it possible to get new memory dynamically as yourThey make it possible to get new memory dynamically as your program is runningprogram is running • They make it easy to represent relationships among data items.They make it easy to represent relationships among data items.
  • 6. Pointer Caution • They are a powerful low-level device.They are a powerful low-level device. • Undisciplined use can be confusing and thus theUndisciplined use can be confusing and thus the source of subtle, hard-to-find bugs.source of subtle, hard-to-find bugs. – Program crashes – Memory leaks – Unpredictable results
  • 7. C Pointer Variables To declare a pointer variable, we must do two thingsTo declare a pointer variable, we must do two things – Use the “*” (star) character to indicate that the variable being defined is a pointer type. – Indicate the type of variable to which the pointer will point (the pointee). This is necessary because C provides operations on pointers (e.g., *, ++, etc) whose meaning depends on the type of the pointee. • General declaration of a pointerGeneral declaration of a pointer type *nameOfPointer;
  • 8. Pointer Declaration The declarationThe declaration int *intPtr; defines the variabledefines the variable intPtr to be a pointer to a variable of typeto be a pointer to a variable of type int.. intPtr will contain the memory address of somewill contain the memory address of some int variable orvariable or int array. Read this declaration asarray. Read this declaration as – “intPtr is a pointer to an int”, or equivalently – “*intPtr is an int” Caution -- Be careful when defining multiple variables on the sameCaution -- Be careful when defining multiple variables on the same line. In this definitionline. In this definition int *intPtr, intPtr2; intPtr is a pointer to an int, but intPtr2 is not!
  • 9. Pointer Operators The two primary operators used with pointers areThe two primary operators used with pointers are * (star) and(star) and && (ampersand)(ampersand) – The * operator is used to define pointer variables and to deference a pointer. “Dereferencing” a pointer means to use the value of the pointee. – The & operator gives the address of a variable. Recall the use of & in scanf( )
  • 10. Pointer Examples int x = 1, y = 2, z[10]; int *ip; /* ip is a pointer to an int */ ip = &x; /* ip points to (contains the memory address of) x */ y = *ip; /* y is now 1, indirectly copied from x using ip */ *ip = 0; /* x is now 0 */ ip = &z[5]; /* ip now points to z[5] */ If ip points to x, then *ip can be used anywhere x can be used so in this example *ip = *ip + 10; and x = x + 10; are equivalent The * and & operators bind more tightly than arithmetic operators so y = *ip + 1; takes the value of the variable to which ip points, adds 1 and assigns it to y Similarly, the statements *ip += 1; and ++*ip; and (*ip)++; all increment the variable to which ip points. (Note that the parenthesis are necessary in the last statement; without them, the expression would increment ip rather than what it points to since operators like * and ++ associate from right to left.)
  • 11. Pointer and Variable types • The type of a pointer and its pointee must matchThe type of a pointer and its pointee must match int a = 42; int *ip; double d = 6.34; double *dp; ip = &a; /* ok -- types match */ dp = &d; /* ok */ ip = &d; /* compiler error -- type mismatch */ dp = &a; /* compiler error */
  • 12. More Pointer Code • Use ampersand (Use ampersand ( & ) to obtain the address of the pointee) to obtain the address of the pointee • Use star (Use star ( * ) to get / change the value of the pointee) to get / change the value of the pointee • UseUse %p to print the value of a pointer withto print the value of a pointer with printf( ) • What is the output from this code?What is the output from this code? int a = 1, *ptr1; /* show value and address of a ** and value of the pointer */ ptr1 = &a ; printf("a = %d, &a = %p, ptr1 = %p, *ptr1 = %dn", a, &a, ptr1, *ptr1) ; /* change the value of a by dereferencing ptr1 ** then print again */ *ptr1 = 35 ; printf(“a = %d, &a = %p, ptr1 = %p, *ptr1 = %dn", a, &a, ptr1, *ptr1) ;
  • 13. NULL • NULL is a special value which may be assigned to a pointerNULL is a special value which may be assigned to a pointer • NULL indicates that this pointer does not point to any variableNULL indicates that this pointer does not point to any variable (there is no pointee)(there is no pointee) • Often used when pointers are declaredOften used when pointers are declared int *pInt = NULL; • Often used as the return type of functions that return a pointer toOften used as the return type of functions that return a pointer to indicate function failureindicate function failure int *myPtr; myPtr = myFunction( ); if (myPtr == NULL){ /* something bad happened */ } • Dereferencing a pointer whose value is NULL will result inDereferencing a pointer whose value is NULL will result in program terminationprogram termination..
  • 14. Pointers and Function Arguments • Since C passes all primitive function arguments “by value” thereSince C passes all primitive function arguments “by value” there is no direct way for a function to alter a variable in the callingis no direct way for a function to alter a variable in the calling code.code. • This version of theThis version of the swap function doesn’t work.function doesn’t work. WHY NOT?WHY NOT? /* calling swap from somewhere in main() */ int x = 42, y = 17; Swap( x, y ); /* wrong version of swap */ void Swap (int a, int b) { int temp; temp = a; a = b; b = temp; }
  • 15. A better swap( ) • The desired effect can be obtained by passing pointers to theThe desired effect can be obtained by passing pointers to the values to be exchanged.values to be exchanged. • This is a very common use of pointers.This is a very common use of pointers. /* calling swap from somewhere in main( ) */ int x = 42, y = 17; Swap( &x, &y ); /* correct version of swap */ void Swap (int *px, int *py) { int temp; temp = *px; *px = *py; *py = temp; }
  • 16. More Pointer Function Parameters • Passing the address of variable(s) to a function canPassing the address of variable(s) to a function can be used to have a function “return” multiple values.be used to have a function “return” multiple values. • The pointer arguments point to variables in the callingThe pointer arguments point to variables in the calling code which are changed (“returned”) by the function.code which are changed (“returned”) by the function.
  • 17. ConvertTime.c void ConvertTime (int time, int *pHours, int *pMins) { *pHours = time / 60; *pMins = time % 60; } int main( ) { int time, hours, minutes; printf("Enter a time duration in minutes: "); scanf ("%d", &time); ConvertTime (time, &hours, &minutes); printf("HH:MM format: %d:%02dn", hours, minutes); return 0; }
  • 18. An Exercise • What is the output from this code?What is the output from this code? void F (int a, int *b) { a = 7 ; *b = a ; b = &a ; *b = 4 ; printf("%d, %dn", a, *b) ; } int main() { int m = 3, n = 5; F(m, &n) ; printf("%d, %dn", m, n) ; return 0; } 4, 4 3, 7
  • 19. Pointers to struct /* define a struct for related student data */ typedef struct student { char name[50]; char major [20]; double gpa; } STUDENT; STUDENT bob = {"Bob Smith", "Math", 3.77}; STUDENT sally = {"Sally", "CSEE", 4.0}; STUDENT *pStudent; /* pStudent is a "pointer to struct student" */ /* make pStudent point to bob */ pStudent = &bob; /* use -> to access the members */ printf ("Bob's name: %sn", pStudent->name); printf ("Bob's gpa : %fn", pStudent->gpa); /* make pStudent point to sally */ pStudent = &sally; printf ("Sally's name: %sn", pStudent->name); printf ("Sally's gpa: %fn", pStudent->gpa); Note too that the following are equivalent. Why?? pStudent->gpa and (*pStudent).gpa /* the parentheses are necessary */
  • 20. Pointer to struct for functions void PrintStudent(STUDENT *studentp) { printf(“Name : %sn”, studentp->name); printf(“Major: %sn”, studentp->major); printf(“GPA : %4.2f”, studentp->gpa); } Passing a pointer to a struct to a function is more efficient than passing the struct itself. Why is this true?
  • 21. References 1. www.tutorialspoint.com/cprogramming/c_pointers.htm 2. www.cprogramming.com/tutorial/c/lesson6.html 3. pw1.netcom.com/~tjensen/ptr/pointers.html 4. Programming in C by yashwant kanitkar 5.ANSI C by E.balagurusamy- TMG publication 6.Computer programming and Utilization by sanjay shah Mahajan Publication 7.www.cprogramming.com/books.html 8.en.wikipedia.org/wiki/C_(programming_language)