Lecture 28: CStrings & POinters

Preview:

DESCRIPTION

CSC 107 – Programming For Science. Lecture 28: CStrings & POinters. 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 - PowerPoint PPT Presentation

Citation preview

LECTURE 28: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

Arrays vs. Pointers

Arrays Pointers

Yams Sweet Potatoes

Arrays vs. Pointers

Arrays Pointers

YamsSweet Potatoes

Sweet PotatoesYams

Arrays vs. Pointers

Arrays = Yams Sweet Potatoes

Pointers = Sweet Potatoes Yams

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 usedchar* 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 #10 due Wed.

Recommended