24
LECTURE 28: CSTRINGS & POINTERS CSC 107 – Programming For Science

Lecture 28: CStrings & POinters

  • Upload
    gudrun

  • View
    26

  • Download
    0

Embed Size (px)

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

Page 1: Lecture  28: CStrings  &  POinters

LECTURE 28:CSTRINGS & POINTERS

CSC 107 – Programming For Science

Page 2: 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

Pointers still hard & this is hardest topic of term

Page 3: Lecture  28: CStrings  &  POinters

Arrays vs. Pointers

Arrays Pointers

Yams Sweet Potatoes

Page 4: Lecture  28: CStrings  &  POinters

Arrays vs. Pointers

Arrays Pointers

YamsSweet Potatoes

Sweet PotatoesYams

Page 5: Lecture  28: CStrings  &  POinters

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

Page 6: Lecture  28: CStrings  &  POinters

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 7: Lecture  28: CStrings  &  POinters

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

Page 8: Lecture  28: CStrings  &  POinters

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 9: Lecture  28: CStrings  &  POinters

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 10: Lecture  28: CStrings  &  POinters

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 11: Lecture  28: CStrings  &  POinters

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 12: Lecture  28: CStrings  &  POinters

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 13: Lecture  28: CStrings  &  POinters

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 14: Lecture  28: CStrings  &  POinters

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: Lecture  28: CStrings  &  POinters

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: Lecture  28: CStrings  &  POinters

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: Lecture  28: CStrings  &  POinters

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: Lecture  28: CStrings  &  POinters

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: Lecture  28: CStrings  &  POinters

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: Lecture  28: CStrings  &  POinters

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: Lecture  28: CStrings  &  POinters

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: Lecture  28: CStrings  &  POinters

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 23: Lecture  28: CStrings  &  POinters

Your Turn

Get into your groups and try this assignment

Page 24: Lecture  28: CStrings  &  POinters

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.