SlideShare a Scribd company logo
Unit-5.1
Pointer, Structure, Union
&
Intro to File Handling
Course: BSC CS
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
Mca 1 pic u-5 pointer, structure ,union and intro to file handling
PPT
pointer, structure ,union and intro to file handling
PPT
Diploma ii cfpc- u-5.1 pointer, structure ,union and intro to file handling
PPT
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...
PPT
Practical Meta Programming
Mca 1 pic u-5 pointer, structure ,union and intro to file handling
pointer, structure ,union and intro to file handling
Diploma ii cfpc- u-5.1 pointer, structure ,union and intro to file handling
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...
Practical Meta Programming

What's hot (20)

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

Viewers also liked (19)

PPT
презентация таипова р_р2013 (1)
PPTX
B.Tech Biotechnology II Elements of Biotechnology Unit 1 Biotechnology
PDF
Bitsat 2008
PPTX
Mca i fma u 1.1 basic concept of accounting
DOCX
Bjmc i, met, unit-i,, origins of the newspaper
PPTX
Diploma engg iv u-1.3 as soon as, no sooner than, hardly when
PPT
B.Sc Micro II Microbial Physiology Unit 4 Spores
DOCX
Bjmc i, , igp, unit-iv, Indian Judiciary
PPTX
Btech i pic u-4 function, storage class and array and strings
PPTX
Mbai itm u1.1 concepts of management
PPTX
B.sc. agri sem ii agricultural microbiology unit 3 soil profile
DOCX
Bjmc i, igp, unit-iii, Nature of Political Parties
PPT
Mca ii-dbms- u-i-introductory concepts of dbms
PPTX
Llb i cloi u iii distribution of powers between central and state
DOCX
Bjmc i, igp, unit-iv, peasant movement
PPT
pointer, structure ,union and intro to file handling
PPT
Mba i mm-1 u-1.4 introduction to marketing
PPT
B.Sc.(Micro+Biotech) II Animal & Plant Physiology Unit 1.2 Plant Hormones
PPTX
презентация таипова р_р2013 (1)
B.Tech Biotechnology II Elements of Biotechnology Unit 1 Biotechnology
Bitsat 2008
Mca i fma u 1.1 basic concept of accounting
Bjmc i, met, unit-i,, origins of the newspaper
Diploma engg iv u-1.3 as soon as, no sooner than, hardly when
B.Sc Micro II Microbial Physiology Unit 4 Spores
Bjmc i, , igp, unit-iv, Indian Judiciary
Btech i pic u-4 function, storage class and array and strings
Mbai itm u1.1 concepts of management
B.sc. agri sem ii agricultural microbiology unit 3 soil profile
Bjmc i, igp, unit-iii, Nature of Political Parties
Mca ii-dbms- u-i-introductory concepts of dbms
Llb i cloi u iii distribution of powers between central and state
Bjmc i, igp, unit-iv, peasant movement
pointer, structure ,union and intro to file handling
Mba i mm-1 u-1.4 introduction to marketing
B.Sc.(Micro+Biotech) II Animal & Plant Physiology Unit 1.2 Plant Hormones
Ad

Similar to Bsc cs 1 pic u-5 pointer, structure ,union and intro to file handling (20)

PPT
btech-1picu-5pointerstructureunionandintrotofilehandling-150122010700-conver.ppt
PPTX
2-Concept of Pointers in c programming.pptx
PPTX
pointers.pptx
PDF
Pointers-Computer programming
PPT
358 33 powerpoint-slides_3-pointers_chapter-3
PPTX
UNIT 4 POINTERS.pptx pointers pptx for basic c language
PPSX
Pointers
PPTX
Pointer.pptx
PPTX
FYBSC(CS)_UNIT-1_Pointers in C.pptx
PPT
PDF
PSPC--UNIT-5.pdf
PPTX
Unit-4-1.pptxjtjrjfjfjfjfjfjfjfjrjrjrjrjejejeje
PPT
ch08.ppt
PPTX
pointers in c programming - example programs
PPTX
Pointers in C Language
PDF
C programming session8
PDF
C programming session8
PPTX
Intro To C++ - Class #17: Pointers!, Objects Talking To Each Other
PPTX
Pointers and Array, pointer and String.pptx
PPTX
Pointer in C
btech-1picu-5pointerstructureunionandintrotofilehandling-150122010700-conver.ppt
2-Concept of Pointers in c programming.pptx
pointers.pptx
Pointers-Computer programming
358 33 powerpoint-slides_3-pointers_chapter-3
UNIT 4 POINTERS.pptx pointers pptx for basic c language
Pointers
Pointer.pptx
FYBSC(CS)_UNIT-1_Pointers in C.pptx
PSPC--UNIT-5.pdf
Unit-4-1.pptxjtjrjfjfjfjfjfjfjfjrjrjrjrjejejeje
ch08.ppt
pointers in c programming - example programs
Pointers in C Language
C programming session8
C programming session8
Intro To C++ - Class #17: Pointers!, Objects Talking To Each Other
Pointers and Array, pointer and String.pptx
Pointer in C

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
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
PPTX
Lesson notes of climatology university.
PDF
Abdominal Access Techniques with Prof. Dr. R K Mishra
PPTX
Cell Types and Its function , kingdom of life
PDF
Chinmaya Tiranga quiz Grand Finale.pdf
PPTX
Final Presentation General Medicine 03-08-2024.pptx
PDF
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
PDF
O7-L3 Supply Chain Operations - ICLT Program
PDF
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
PPTX
master seminar digital applications in india
PPTX
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
PDF
OBE - B.A.(HON'S) IN INTERIOR ARCHITECTURE -Ar.MOHIUDDIN.pdf
PDF
A systematic review of self-coping strategies used by university students to ...
PDF
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
PDF
Complications of Minimal Access Surgery at WLH
PPTX
GDM (1) (1).pptx small presentation for students
PDF
Computing-Curriculum for Schools in Ghana
PDF
2.FourierTransform-ShortQuestionswithAnswers.pdf
PPTX
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
PPTX
Final Presentation General Medicine 03-08-2024.pptx
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
Lesson notes of climatology university.
Abdominal Access Techniques with Prof. Dr. R K Mishra
Cell Types and Its function , kingdom of life
Chinmaya Tiranga quiz Grand Finale.pdf
Final Presentation General Medicine 03-08-2024.pptx
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
O7-L3 Supply Chain Operations - ICLT Program
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
master seminar digital applications in india
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
OBE - B.A.(HON'S) IN INTERIOR ARCHITECTURE -Ar.MOHIUDDIN.pdf
A systematic review of self-coping strategies used by university students to ...
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
Complications of Minimal Access Surgery at WLH
GDM (1) (1).pptx small presentation for students
Computing-Curriculum for Schools in Ghana
2.FourierTransform-ShortQuestionswithAnswers.pdf
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
Final Presentation General Medicine 03-08-2024.pptx

Bsc cs 1 pic u-5 pointer, structure ,union and intro to file handling

  • 1. Unit-5.1 Pointer, Structure, Union & Intro to File Handling Course: BSC CS 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)