27
LECTURE 32: CSTRINGS & POINTERS CSC 107 – Programming For Science

CSC 107 – Programming For Science. Today’s Goal Learn how pointers really used with arrays Exploit the similarity between pointers & arrays Take

Embed Size (px)

Citation preview

Page 1: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

LECTURE 32:CSTRINGS & POINTERS

CSC 107 – Programming For Science

Page 2: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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

Page 3: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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)

Page 4: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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

Page 5: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

& 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;

Page 6: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

Arrays vs. Pointers

Arrays Pointers

Yams Sweet Potatoes

Page 7: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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

Page 8: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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

Page 9: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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

Page 10: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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);

Page 11: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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");

Page 12: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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

Page 13: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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)

Page 14: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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;

Page 15: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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;

Page 16: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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;

Page 17: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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;

Page 18: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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;

Page 19: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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;

Page 20: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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;

Page 21: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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;

Page 22: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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;

Page 23: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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;

Page 24: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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;

Page 25: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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');

Page 26: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

Your Turn

Get into your groups and try this assignment

Page 27: CSC 107 – Programming For Science. Today’s Goal  Learn how pointers really used with arrays  Exploit the similarity between pointers & arrays  Take

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