Upload
rosamond-carroll
View
213
Download
0
Tags:
Embed Size (px)
Citation preview
LECTURE 32:CSTRINGS & POINTERS
CSC 107 – Programming For Science
Today’s Goal
Learn how pointers really used with arrays Exploit the similarity between pointers &
arrays Take advantage of relationship with built-in
functions Understand what NULL is & why we use
NULL
Pointers still hard & this is hardest topic of term
Today’s Goal
Learn how pointers really used with arrays Exploit the similarity between pointers &
arrays Take advantage of relationship with built-in
functions Understand what NULL is & why we use
NULL
Pointers still hard & this is hardest topic of term (Unless you have not learned how to write
loops, yet)
Pointers & Variables
Variable gives name for address in memory Initial values unknown if it is not set Value at the location used when variable
used Pointer is variable like any other…
… but the pointer’s value is address of a variable
Aliases other variables so both can update location
Pointers can be used like other variables… …but value is address and not a useful
number
& and * Operators
& operator gets address of scalar variable Use only with variables, including array
elements Lets variable & pointer alias same memory
location Pointer used two ways: arrow & target
of arrow When code has the name alone, using the
arrow With *pointer, value at target can be used
or setdouble x = 4, *y, *z;y = &x;z = y;cout << x << " " << y << " " << *y << endl;cout << x << " " << y << " " << *y << endl;
Arrays vs. Pointers
Arrays Pointers
Yams Sweet Potatoes
Arrays vs. Pointers
Arrays = YamsPointers = Sweet Potatoes
Makes space at declaration
Variable value is address
Use [] to access entries Can also access using *
Can be assigned a pointer
Needs target to be useful
Variable value is address
Use * to access target Can also access using []
Can be assigned array
Arrays vs. Pointers
Arrays = YamsPointers = Sweet Potatoes
Makes space at declaration
Variable value is address
Use [] to access entries Can also access using *
Can be assigned a pointer
Needs target to be useful
Variable value is address
Use * to access target Can also access using []
Can be assigned array
Often usepointers & arrays interchangeably
Arrays + Pointers =
Pointer arithmetic enables mixing & matching Relies on fact that * and [] are synonyms Used processing cStrings (& with other
arrays, too) Provides another way to access array
elements Use foo[nnn] to access entry in foo at
index nnn But could also access entry using *(foo+nnn)
Pointers follow same rules and work similarly But, pointers access offset from where they
point
How Pointers Get Used
Lots of built-in cString functions return pointers Not a new array, but points within array
passed in Provides a way to use & modify cString as
needed Requires program add line to include
prototypes
#include <cstring> Two main functions that are often used
char* strstr(const char*, const char*);char* strchr(const char*, int chr);
Using the strstr Function
Finds where 2nd cString is found in 1st cString Pointer to 1st entry returned by this function To be found, needs perfect match of entire
cString Looks from left to right until a match is
found
char myName[]="John J. Jingleheimerschmidt";char *start = strstr(myName, "J");char *ptr = strstr(myName, "John");char *middle = strstr(start + 1, "J");char *last = strstr(middle + 1, "J");char *oops = strstr(last + 1, "J");
Slide Is NULL (But Not void) NULL is special value used by all
pointers Not an actual address – NULL used if when
no target Not a real address, but says DO NOT USE
ME If pointer is NULL, accessing value will
crash May get vague error like "Segmentation
Fault" Most likely, however, the program simply
crashes Use NULL anywhere in code pointer is
usable Needs #include <cstring> & must be in
CAPS
Slide Is NULL (But Not void) NULL is special value used by all
pointers Not an actual address – NULL used if when
no target Not a real address, but says DO NOT USE
ME If pointer is NULL, accessing value will
crash May get vague error like "Segmentation
Fault" Most likely, however, the program simply
crashes Use NULL anywhere in code pointer is
usable Needs #include <cstring> & must be in
CAPS
(Tony apologizes,btw)
Using NULL With Pointers
char * ptr = NULL;char *prof = "Matthew Hertz"; char letter = *ptr;float * toiletBulb = ptr;toiletBulb = NULL;int * pIX = null;ptr = strstr("Hi Mom!", "mom");strstr(NULL, "Monkeys!");strstr(prof, ptr);*ptr = NULL;
Using NULL With Pointers
char * ptr = NULL;char *prof = "Matthew Hertz"; char letter = *ptr;float * toiletBulb = ptr;toiletBulb = NULL;int * pIX = null;ptr = strstr("Hi Mom!", "mom");strstr(NULL, "Monkeys!");strstr(prof, ptr);*ptr = NULL;
Using NULL With Pointers
char * ptr = NULL;char *prof = "Matthew Hertz"; char letter = *ptr;float * toiletBulb = ptr;toiletBulb = NULL;int * pIX = null;ptr = strstr("Hi Mom!", "mom");strstr(NULL, "Monkeys!");strstr(prof, ptr);*ptr = NULL;
Using NULL With Pointers
char * ptr = NULL;char *prof = "Matthew Hertz"; char letter = *ptr;float * toiletBulb = ptr;toiletBulb = NULL;int * pIX = null;ptr = strstr("Hi Mom!", "mom");strstr(NULL, "Monkeys!");strstr(prof, ptr);*ptr = NULL;
Using NULL With Pointers
char * ptr = NULL;char *prof = "Matthew Hertz"; char letter = *ptr;float * toiletBulb = ptr;toiletBulb = NULL;int * pIX = null;ptr = strstr("Hi Mom!", "mom");strstr(NULL, "Monkeys!");strstr(prof, ptr);*ptr = NULL;
Using NULL With Pointers
char * ptr = NULL;char *prof = "Matthew Hertz"; char letter = *ptr;float * toiletBulb = ptr;toiletBulb = NULL;int * pIX = null;ptr = strstr("Hi Mom!", "mom");strstr(NULL, "Monkeys!");strstr(prof, ptr);*ptr = NULL;
Using NULL With Pointers
char * ptr = NULL;char *prof = "Matthew Hertz"; char letter = *ptr;float * toiletBulb = ptr;toiletBulb = NULL;int * pIX = null;ptr = strstr("Hi Mom!", "mom");strstr(NULL, "Monkeys!");strstr(prof, ptr);*ptr = NULL;
Using NULL With Pointers
char * ptr = NULL;char *prof = "Matthew Hertz"; char letter = *ptr;float * toiletBulb = ptr;toiletBulb = NULL;int * pIX = null;ptr = strstr("Hi Mom!", "mom");strstr(NULL, "Monkeys!");strstr(prof, ptr);*ptr = NULL;
Using NULL With Pointers
char * ptr = NULL;char *prof = "Matthew Hertz"; char letter = *ptr;float * toiletBulb = ptr;toiletBulb = NULL;int * pIX = null;ptr = strstr("Hi Mom!", "mom");strstr(NULL, "Monkeys!");strstr(prof, ptr);*ptr = NULL;
Using NULL With Pointers
char * ptr = NULL;char *prof = "Matthew Hertz"; char letter = *ptr;float * toiletBulb = ptr;toiletBulb = NULL;int * pIX = null;ptr = strstr("Hi Mom!", "mom");strstr(NULL, "Monkeys!");strstr(prof, ptr); *ptr = NULL;
Using NULL With Pointers
char * ptr = NULL;char *prof = "Matthew Hertz"; char letter = *ptr;float * toiletBulb = ptr;toiletBulb = NULL;int * pIX = null;ptr = strstr("Hi Mom!", "mom");strstr(NULL, "Monkeys!");strstr(prof, ptr);*ptr = NULL;
Using the strchr Function
Finds where char found in 1st cString Pointer to 1st entry returned by this function To be found, needs exact match of the char Looks from left to right until a match is
found
char myName[]="John J. Jingleheimerschmidt";char *start = strchr(myName, 'J');char *ptr = strchr(myName, myName[4]);char *startOver = strchr(start, 'J');char *middle = strchr(start + 1, 'J');char *nope = strchr(myName, 'j');
Your Turn
Get into your groups and try this assignment
For Next Lecture
Dynamic memory allocation in 12.9 & 12.17 More interesting topic in all of computer
science? As program runs, can we grow & shrink
arrays? My thesis was related to which lecture this
semester?
Angel also has Weekly Assignment #11 due Tues.
Last programming assignment available now