SlideShare a Scribd company logo
Programming in C
Pointer BasicsPointer Basics
What is a pointer
• In a generic sense, a “pointer” is anything thatIn a generic sense, a “pointer” is anything that
tells us where something can be found.tells us 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 toIn Java, the name of an object is a reference to
that object. Herethat object. Here ford is a reference to a Truckis a reference to a Truck
object. It contains the memory address at whichobject. It contains the memory address at which
the Truck object is stored.the Truck object is stored.
Truck ford = new Truck( );
• The syntax for using the reference is prettyThe syntax for using the reference is pretty
simple. Just use the “dot” notation.simple. Just use the “dot” notation.
ford.start( );
ford.drive( 23 );
ford.turn (LEFT);
1/14/10
What is a pointer ?
• In C, a pointer variable (or just “pointer”) isIn C, a pointer variable (or just “pointer”) is
similar to a reference in Java except thatsimilar to a 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
1/14/10
Why Pointers?
• They allow you to refer to large data structures in aThey allow you to refer to large data structures in a
compact waycompact way
• They facilitate sharing between different parts of programsThey facilitate sharing between different parts of programs
• They make it possible to get new memory dynamically asThey make it possible to get new memory dynamically as
your program is runningyour program is running
• They make it easy to represent relationships among dataThey make it easy to represent relationships among data
items.items.
1/14/10
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
1/14/10
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;
1/14/10
Pointer Declaration
The declarationThe declaration
int *intPtr;
defines the variabledefines the variable intPtr to be a pointer to a variable ofto be a pointer to a variable of
typetype 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 theCaution -- Be careful when defining multiple variables on the
same line. In this definitionsame line. In this definition
int *intPtr, intPtr2;
intPtr is a pointer to an int, but intPtr2 is not!
1/14/10
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( )
1/14/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.)
1/14/10
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 */
1/14/10
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) ;
1/14/10
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 anyNULL indicates that this pointer does not point to any
variable (there is no pointee)variable (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 aOften used as the return type of functions that return a
pointer to indicate function failurepointer to indicate 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..
1/14/10
Pointers and Function Arguments
• Since C passes all primitive function arguments “by value”Since C passes all primitive function arguments “by value”
there is no direct way for a function to alter a variable in thethere is no direct way for a function to alter a variable in the
calling code.calling 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;
}
1/14/10
A better swap( )
• The desired effect can be obtained by passing pointers toThe desired effect can be obtained by passing pointers to
the values to be exchanged.the 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;
}
1/14/10
More Pointer Function
Parameters
• Passing the address of variable(s) to a functionPassing the address of variable(s) to a function
can be used to have a function “return” multiplecan be used to have a function “return” multiple
values.values.
• The pointer arguments point to variables in theThe pointer arguments point to variables in the
calling code which are changed (“returned”) bycalling code which are changed (“returned”) by
the function.the function.
1/14/10
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;
}
1/14/10
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
1/14/10
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 */
9/24/10
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?

More Related Content

PPT
Diploma ii cfpc- u-5.1 pointer, structure ,union and intro to file handling
PPT
Bsc cs 1 pic u-5 pointer, structure ,union and intro to file handling
PPT
Mca 1 pic u-5 pointer, structure ,union and intro to file handling
PPT
pointer, structure ,union and intro to file handling
PPT
pointer, structure ,union and intro to file handling
PPT
Pointer in C
Diploma ii cfpc- u-5.1 pointer, structure ,union and intro to file handling
Bsc cs 1 pic u-5 pointer, structure ,union and intro to file handling
Mca 1 pic u-5 pointer, structure ,union and intro to file handling
pointer, structure ,union and intro to file handling
pointer, structure ,union and intro to file handling
Pointer in C

What's hot (20)

PDF
Lecturer23 pointersin c.ppt
PPTX
Pointers in C
PPTX
pointer, virtual function and polymorphism
PPT
Pointers
PDF
Lk module5 pointers
PDF
Types of pointer in C
PDF
(3) cpp procedural programming
PPTX
Double pointer (pointer to pointer)
PPTX
Presentation 5th
PPTX
Pointers
PPT
Functions
PPT
PPTX
Inline assembly language programs in c
PPT
Void pointer in c
PPTX
Pointers,virtual functions and polymorphism cpp
PPTX
Inline function
PPTX
Functions in python
PDF
VIT351 Software Development VI Unit1
PDF
Chapter 11 Function
PDF
14 Jo P Feb 08
Lecturer23 pointersin c.ppt
Pointers in C
pointer, virtual function and polymorphism
Pointers
Lk module5 pointers
Types of pointer in C
(3) cpp procedural programming
Double pointer (pointer to pointer)
Presentation 5th
Pointers
Functions
Inline assembly language programs in c
Void pointer in c
Pointers,virtual functions and polymorphism cpp
Inline function
Functions in python
VIT351 Software Development VI Unit1
Chapter 11 Function
14 Jo P Feb 08
Ad

Viewers also liked (20)

PPT
Email là gì? 5 bí quyết giúp bạn giao tiếp qua email hiệu quả nhất
PPTX
Kĩ năng giao tiếp qua email chuyên nghiệp
PDF
Lập trình C cho 8051
PDF
DOC
83 2013-nd-cp
PDF
VI ĐIỀU KHIỂN 8051
DOC
[Tiếng Anh] 600 Từ vựng Toeic
PPTX
Applying Semat - ứng dụng semat
DOC
Cơ sở lý luận và thực tiễn của công tác nghiên cứu dư luận xã hội (1)
PPT
Option thuyet trinh
DOCX
Bạo lực cách mạng
PPT
Chuong 4 cohoc chatluu
DOCX
Cau hoi dau tu
PPT
Dia li 11 bai 11 khu vuc dong nam a tiet 1
PDF
Fx3 g,fx3u,fx3uc series users manual positioning control edition
PPTX
Các nhóm phương pháp nghiên cứu khoa học nghiên cứu khoa học
DOC
Quyết định tuyển dụng
PDF
Nlp lap trinh ngon ngu tu duy
DOC
Bài tập CTDL và GT 4
Email là gì? 5 bí quyết giúp bạn giao tiếp qua email hiệu quả nhất
Kĩ năng giao tiếp qua email chuyên nghiệp
Lập trình C cho 8051
83 2013-nd-cp
VI ĐIỀU KHIỂN 8051
[Tiếng Anh] 600 Từ vựng Toeic
Applying Semat - ứng dụng semat
Cơ sở lý luận và thực tiễn của công tác nghiên cứu dư luận xã hội (1)
Option thuyet trinh
Bạo lực cách mạng
Chuong 4 cohoc chatluu
Cau hoi dau tu
Dia li 11 bai 11 khu vuc dong nam a tiet 1
Fx3 g,fx3u,fx3uc series users manual positioning control edition
Các nhóm phương pháp nghiên cứu khoa học nghiên cứu khoa học
Quyết định tuyển dụng
Nlp lap trinh ngon ngu tu duy
Bài tập CTDL và GT 4
Ad

Similar to Lap trinh C co ban va nang cao (20)

PPT
Btech 1 pic u-5 pointer, structure ,union and intro to file handling
PPT
btech-1picu-5pointerstructureunionandintrotofilehandling-150122010700-conver.ppt
PPTX
2-Concept of Pointers in c programming.pptx
PPTX
Pointers in c - Mohammad Salman
PPT
358 33 powerpoint-slides_3-pointers_chapter-3
PPTX
Structured programming Unit-6-Strings-Unit-8-Pointer.pptx
PPTX
UNIT 4 POINTERS.pptx pointers pptx for basic c language
PDF
Pointers-Computer programming
PPTX
pointers.pptx
PDF
Functions And Header Files In C++ | Bjarne stroustrup
PPTX
UNIT 6structureofcprogrammingforppt.pptx
PDF
VIT351 Software Development VI Unit3
PPT
Advanced C programming
PDF
PSPC--UNIT-5.pdf
PDF
EASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdf
PPTX
C programming
PPT
Advanced pointers
PDF
CSEG1001 Unit 4 Functions and Pointers
PPTX
pointers in c programming - example programs
PPSX
Pointers
Btech 1 pic u-5 pointer, structure ,union and intro to file handling
btech-1picu-5pointerstructureunionandintrotofilehandling-150122010700-conver.ppt
2-Concept of Pointers in c programming.pptx
Pointers in c - Mohammad Salman
358 33 powerpoint-slides_3-pointers_chapter-3
Structured programming Unit-6-Strings-Unit-8-Pointer.pptx
UNIT 4 POINTERS.pptx pointers pptx for basic c language
Pointers-Computer programming
pointers.pptx
Functions And Header Files In C++ | Bjarne stroustrup
UNIT 6structureofcprogrammingforppt.pptx
VIT351 Software Development VI Unit3
Advanced C programming
PSPC--UNIT-5.pdf
EASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdf
C programming
Advanced pointers
CSEG1001 Unit 4 Functions and Pointers
pointers in c programming - example programs
Pointers

Recently uploaded (20)

PPTX
Introduction to Information and Communication Technology
PPTX
Internet___Basics___Styled_ presentation
PPTX
introduction about ICD -10 & ICD-11 ppt.pptx
PPT
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
PPTX
innovation process that make everything different.pptx
PPTX
Module 1 - Cyber Law and Ethics 101.pptx
PPTX
Introuction about ICD -10 and ICD-11 PPT.pptx
PDF
Introduction to the IoT system, how the IoT system works
PDF
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
PPTX
Funds Management Learning Material for Beg
PDF
RPKI Status Update, presented by Makito Lay at IDNOG 10
PDF
The New Creative Director: How AI Tools for Social Media Content Creation Are...
PDF
The Internet -By the Numbers, Sri Lanka Edition
PDF
Testing WebRTC applications at scale.pdf
PDF
Decoding a Decade: 10 Years of Applied CTI Discipline
PPTX
SAP Ariba Sourcing PPT for learning material
PPTX
Slides PPTX World Game (s) Eco Economic Epochs.pptx
DOCX
Unit-3 cyber security network security of internet system
PPTX
PptxGenJS_Demo_Chart_20250317130215833.pptx
PPTX
Introduction about ICD -10 and ICD11 on 5.8.25.pptx
Introduction to Information and Communication Technology
Internet___Basics___Styled_ presentation
introduction about ICD -10 & ICD-11 ppt.pptx
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
innovation process that make everything different.pptx
Module 1 - Cyber Law and Ethics 101.pptx
Introuction about ICD -10 and ICD-11 PPT.pptx
Introduction to the IoT system, how the IoT system works
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
Funds Management Learning Material for Beg
RPKI Status Update, presented by Makito Lay at IDNOG 10
The New Creative Director: How AI Tools for Social Media Content Creation Are...
The Internet -By the Numbers, Sri Lanka Edition
Testing WebRTC applications at scale.pdf
Decoding a Decade: 10 Years of Applied CTI Discipline
SAP Ariba Sourcing PPT for learning material
Slides PPTX World Game (s) Eco Economic Epochs.pptx
Unit-3 cyber security network security of internet system
PptxGenJS_Demo_Chart_20250317130215833.pptx
Introduction about ICD -10 and ICD11 on 5.8.25.pptx

Lap trinh C co ban va nang cao

  • 1. Programming in C Pointer BasicsPointer Basics
  • 2. What is a pointer • In a generic sense, a “pointer” is anything thatIn a generic sense, a “pointer” is anything that tells us where something can be found.tells us 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 toIn Java, the name of an object is a reference to that object. Herethat object. Here ford is a reference to a Truckis a reference to a Truck object. It contains the memory address at whichobject. It contains the memory address at which the Truck object is stored.the Truck object is stored. Truck ford = new Truck( ); • The syntax for using the reference is prettyThe syntax for using the reference is pretty simple. Just use the “dot” notation.simple. Just use the “dot” notation. ford.start( ); ford.drive( 23 ); ford.turn (LEFT);
  • 4. 1/14/10 What is a pointer ? • In C, a pointer variable (or just “pointer”) isIn C, a pointer variable (or just “pointer”) is similar to a reference in Java except thatsimilar to a 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. 1/14/10 Why Pointers? • They allow you to refer to large data structures in aThey allow you to refer to large data structures in a compact waycompact way • They facilitate sharing between different parts of programsThey facilitate sharing between different parts of programs • They make it possible to get new memory dynamically asThey make it possible to get new memory dynamically as your program is runningyour program is running • They make it easy to represent relationships among dataThey make it easy to represent relationships among data items.items.
  • 6. 1/14/10 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. 1/14/10 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. 1/14/10 Pointer Declaration The declarationThe declaration int *intPtr; defines the variabledefines the variable intPtr to be a pointer to a variable ofto be a pointer to a variable of typetype 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 theCaution -- Be careful when defining multiple variables on the same line. In this definitionsame line. In this definition int *intPtr, intPtr2; intPtr is a pointer to an int, but intPtr2 is not!
  • 9. 1/14/10 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. 1/14/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. 1/14/10 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. 1/14/10 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. 1/14/10 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 anyNULL indicates that this pointer does not point to any variable (there is no pointee)variable (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 aOften used as the return type of functions that return a pointer to indicate function failurepointer to indicate 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. 1/14/10 Pointers and Function Arguments • Since C passes all primitive function arguments “by value”Since C passes all primitive function arguments “by value” there is no direct way for a function to alter a variable in thethere is no direct way for a function to alter a variable in the calling code.calling 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. 1/14/10 A better swap( ) • The desired effect can be obtained by passing pointers toThe desired effect can be obtained by passing pointers to the values to be exchanged.the 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. 1/14/10 More Pointer Function Parameters • Passing the address of variable(s) to a functionPassing the address of variable(s) to a function can be used to have a function “return” multiplecan be used to have a function “return” multiple values.values. • The pointer arguments point to variables in theThe pointer arguments point to variables in the calling code which are changed (“returned”) bycalling code which are changed (“returned”) by the function.the function.
  • 17. 1/14/10 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. 1/14/10 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. 1/14/10 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. 9/24/10 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?

Editor's Notes

  • #15: Trace the execution of swap to show that this doesn’t work
  • #16: Trace the execution of swap showing how/where variables are changed