SlideShare a Scribd company logo
1 of 30
Download to read offline
inst.eecs.berkeley.edu/~cs61c/su05
        CS61C : Machine Structures
        Lecture #3: C Pointers & Arrays




                          2005-06-22
                          Andy Carle
CS 61C L03 C Arrays (1)                A Carle, Summer 2005 © UCB
Address vs. Value

• What good is a bunch of memory if you
  can’t select parts of it?
       • Each memory cell has an address
         associated with it.
       • Each cell also stores some value.
• Don’t confuse the address referring to
  a memory location with the value
  stored in that location.
       101 102 103 104 105 ...
...                       23     42          ...


      CS 61C L03 C Arrays (2)                      A Carle, Summer 2005 © UCB
Pointers
• A pointer is just a C variable whose
  value is the address of another
  variable!
• After declaring a pointer:
     int *ptr;
 ptr doesn’t actually point to anything
 yet. We can either:
     • make it point to something that already
       exists, or
     • allocate room in memory for something
       new that it will point to… (next time)

 CS 61C L03 C Arrays (3)                 A Carle, Summer 2005 © UCB
Pointers

• Declaring a pointer just allocates
  space to hold the pointer – it does not
  allocate something to be pointed to!


• Local variables in C are not initialized,
  they may contain anything.




 CS 61C L03 C Arrays (4)             A Carle, Summer 2005 © UCB
Pointer Usage Example

                            0xffff ffff    Memory and Pointers:


                            0xcafe 0000



                            0xbeef 0000



                             0x0000 0004
                             0x0000 0000




  CS 61C L03 C Arrays (5)                                A Carle, Summer 2005 © UCB
Pointer Usage Example

                               0xffff ffff    Memory and Pointers:
                                              int *p, v;
v:    0xXXXXXXXX               0xcafe 0000



p:     0xXXXXXXXX              0xbeef 0000



                                0x0000 0004
                                0x0000 0000




     CS 61C L03 C Arrays (6)                                A Carle, Summer 2005 © UCB
Pointer Usage Example

                               0xffff ffff    Memory and Pointers:
                                              int *p, v;
v:    0xXXXXXXXX               0xcafe 0000    p = &v;
p:      0xcafe 0000            0xbeef 0000



                                0x0000 0004
                                0x0000 0000




     CS 61C L03 C Arrays (7)                                A Carle, Summer 2005 © UCB
Pointer Usage Example

                               0xffff ffff    Memory and Pointers:
                                              int *p, v;
v:     0x0000 0017             0xcafe 0000    p = &v;
p:      0xcafe 0000            0xbeef 0000    v = 0x17;

                                0x0000 0004
                                0x0000 0000




     CS 61C L03 C Arrays (8)                                A Carle, Summer 2005 © UCB
Pointer Usage Example

                               0xffff ffff    Memory and Pointers:
                                              int *p, v;
v:     0x0000 001b             0xcafe 0000    p = &v;
p:      0xcafe 0000            0xbeef 0000    v = 0x17;
                                              *p = *p + 4;
                                0x0000 0004
                                0x0000 0000   V = *p + 4



     CS 61C L03 C Arrays (9)                                 A Carle, Summer 2005 © UCB
Pointers in C
• Why use pointers?
     • If we want to pass a huge struct or array,
       it’s easier to pass a pointer than the
       whole thing.
     • In general, pointers allow cleaner, more
       compact code.
• So what are the drawbacks?
     • Pointers are probably the single largest
       source of bugs in software, so be careful
       anytime you deal with them.
     • Dangling reference (premature free)
     • Memory leaks (tardy free)
 CS 61C L03 C Arrays (10)                 A Carle, Summer 2005 © UCB
C Pointer Dangers

• What does the following code do?
  void f()
  {
      int *ptr;
      *ptr = 5;
  }

• S E G F A U L T ! (on my machine/os)
     • (Not a nice compiler error like you would
       hope!)

 CS 61C L03 C Arrays (11)                A Carle, Summer 2005 © UCB
C Pointer Dangers
• Unlike Java, C lets you cast a value of
  any type to any other type without
  performing any checking.
           int x = 1000;
           int *p = x;        /* invalid */
           int *q = (int *) x; /* valid */
• The first pointer declaration is invalid
  since the types do not match.
• The second declaration is valid C but is
  almost certainly wrong
     • Is it ever correct?
 CS 61C L03 C Arrays (12)            A Carle, Summer 2005 © UCB
Pointers and Parameter Passing
• Java and C pass a parameter “by value”
 • procedure/function gets a copy of the
   parameter, so changing the copy cannot
   change the original
   void addOne (int x) {
      x = x + 1;
   }
  int y = 3;
  addOne(y);


 •y is still = 3

   CS 61C L03 C Arrays (13)            A Carle, Summer 2005 © UCB
Pointers and Parameter Passing
• How to get a function to change a value?
  void addOne (int *p) {
    *p = *p + 1;
  }
  int y = 3;


  addOne(&y);


 •y is now = 4



   CS 61C L03 C Arrays (14)         A Carle, Summer 2005 © UCB
Arrays (1/7)

• Declaration:
   int ar[2];
 declares a 2-element integer array.
    int ar[] = {795, 635};
 declares and fills a 2-elt integer array.
• Accessing elements:
   ar[num];
 returns the num t h element from 0.
 CS 61C L03 C Arrays (15)           A Carle, Summer 2005 © UCB
Arrays (2/7)

• Arrays are (almost) identical to
  pointers
     •char *string and char string[] are
      nearly identical declarations
     • They differ in very subtle ways:
       incrementing, declaration of filled arrays


• Key Difference:
 An array variable is a CONSTANT
 pointer to the first element.
 CS 61C L03 C Arrays (16)                 A Carle, Summer 2005 © UCB
Arrays (3/7)

• Consequences:
     •ar is a pointer
     •ar[0] is the same as *ar
     •ar[2] is the same as *(ar+2)
     • We can use pointer arithmetic to access
       arrays more conveniently.
• Declared arrays are only allocated
  while the scope is valid
        char *foo() {
            char string[32]; ...;
            return string;
        } is incorrect
 CS 61C L03 C Arrays (17)               A Carle, Summer 2005 © UCB
Arrays (4/7)

• Array size n; want to access from 0 to
  n-1:
 int ar[10], i=0, sum = 0;
 ...
 while (i < 10)
     /* sum = sum+ar[i];
                        i = i + 1; */

           sum += ar[i++];




 CS 61C L03 C Arrays (18)               A Carle, Summer 2005 © UCB
Arrays (5/7)

• Array size n; want to access from 0 to
  n-1, so you should use counter AND
  utilize a constant for declaration & incr
     • Wrong
        int i, ar[10];
        for(i = 0; i < 10; i++){ ... }
     • Right
        #define ARRAY_SIZE 10
        int i, a[ARRAY_SIZE];
        for(i = 0; i < ARRAY_SIZE; i++){ ... }

• Why? SINGLE SOURCE OF TRUTH
     • You’re utilizing indirection and avoiding
       maintaining two copies of the number 10
 CS 61C L03 C Arrays (19)                A Carle, Summer 2005 © UCB
Arrays (6/7)

• Pitfall: An array in C does not know its
  own length, & bounds not checked!
     • Consequence: We can accidentally
       access off the end of an array.
     • Consequence: We must pass the array
       and its size to a procedure which is
       going to traverse it.
• Segmentation faults and bus errors:
     • These are VERY difficult to find;
       be careful!
     • You’ll learn how to debug these in lab…
 CS 61C L03 C Arrays (20)                  A Carle, Summer 2005 © UCB
Arrays 7/7: In Functions

• An array parameter can be declared as
  an array or a pointer; an array
  argument can be passed as a pointer.
     • Can be incremented

int strlen(char s[])       int strlen(char *s)
{                          {
    int n = 0;                 int n = 0;
    while (s[n] != 0)          while (s[n] != 0)
        n++;                       n++;
    return n;                  return n;
}                          }
         Could be written:
          while (s[n])
 CS 61C L03 C Arrays (21)              A Carle, Summer 2005 © UCB
Pointer Arithmetic (1/5)

• Since a pointer is just a mem address, we
  can add to it to traverse an array.
• p+1 returns a ptr to the next array elt.
•(*p)+1 vs *p++ vs *(p+1) vs *(p)++ ?
  • x = *p++ ⇒ x = *p ; p = p + 1;
  • x = (*p)++ ⇒ x = *p ; *p = *p + 1;
• What if we have an array of large structs
  (objects)?
  • C takes care of it: In reality, p+1 doesn’t add
    1 to the memory address, it adds the size of
    the array element.
   CS 61C L03 C Arrays (22)               A Carle, Summer 2005 © UCB
Pointer Arithmetic (2/5)
• So what’s valid pointer arithmetic?
     • Add an integer to a pointer.
     • Subtract 2 pointers (in the same array).
     • Compare pointers (<, <=, ==, !=, >, >=)
     • Compare pointer to NULL (indicates that
       the pointer points to nothing).
• Everything else is illegal since it
  makes no sense:
     • adding two pointers
     • multiplying pointers
     • subtract pointer from integer
 CS 61C L03 C Arrays (23)                 A Carle, Summer 2005 © UCB
Pointer Arithmetic (3/5)

• We can use pointer arithmetic to
  “walk” through memory:
void copy(int *from, int *to, int n) {
    int i;
    for (i=0; i<n; i++) {
        *to++ = *from++;
    }
}

° C automatically adjusts the pointer by
  the right amount each time (i.e., 1 byte
  for a char, 4 bytes for an int, etc.)
 CS 61C L03 C Arrays (24)            A Carle, Summer 2005 © UCB
Pointer Arithmetic (4/5)

• C knows the size of the thing a pointer
  points to – every addition or
  subtraction moves that many bytes.
• So the following are equivalent:
       int get(int array[], int n)
       {
           return (array[n]);
           /* OR */
           return *(array + n);
       }


 CS 61C L03 C Arrays (25)            A Carle, Summer 2005 © UCB
Pointer Arithmetic (5/5)

• Array size n; want to access from 0 to
  n-1
  • test for exit by comparing to address one
    element past the array
 int ar[10], *p, *q, sum = 0;
 ...
 p = ar; q = &(ar[10]);
 while (p != q)
       /* sum = sum + *p; p = p + 1; */
       sum += *p++;
  • Is this legal?
• C defines that one element past end of
  array must be a valid address, i.e., not
  cause an bus error or address error
 CS 61C L03 C Arrays (26)              A Carle, Summer 2005 © UCB
Pointer Arithmetic Summary
•x =*(p+1)?
   ⇒ x = *(p+1) ;
•x =*p+1 ?
   ⇒ x = (*p) + 1 ;
• x =(*p)++ ?
   ⇒ x = *p ; *p = *p + 1;
•x =*p++ ? (*p++) ? *(p)++ ? *(p++) ?
   ⇒ x = *p ; p = p + 1;
•x =*++p ?
   ⇒ p = p + 1 ; x = *p ;
• Lesson?
   • These cause more problems than they solve!
   CS 61C L03 C Arrays (27)                 A Carle, Summer 2005 © UCB
Pointer Arithmetic Peer Instruction Q
        How many of the following are invalid?
        I.    pointer + integer
        II. integer + pointer
        III. pointer + pointer
        IV. pointer – integer
        V. integer – pointer
        VI. pointer – pointer
        VII. compare pointer to pointer
        VIII. compare pointer to integer
        IX. compare pointer to 0
        X. compare pointer to NULL


CS 61C L03 C Arrays (28)                 A Carle, Summer 2005 © UCB
Pointer Arithmetic Peer Instruction A
•  How many of the following are invalid?
I.         pointer + integer                   ptr + 1
II.        integer + pointer                   1 + ptr
III.       pointer + pointer                 ptr + ptr
IV.        pointer – integer                   ptr - 1
V.         integer – pointer                   1 - ptr
VI.        pointer – pointer                 ptr - ptr
VII.       compare pointer to pointer   ptr1 == ptr2
VIII.      compare pointer to integer        ptr == 1
IX.        compare pointer to 0         ptr == NULL
X.         compare pointer to NULL      ptr == NULL




        CS 61C L03 C Arrays (29)                         A Carle, Summer 2005 © UCB
“And in Conclusion…”
• Pointers and arrays are virtually same
• C knows how to increment pointers
• C is an efficient language, with little
  protection
     • Array bounds not checked
     • Variables not automatically initialized
• (Beware) The cost of efficiency is
  more overhead for the programmer.
     • “C gives you a lot of extra rope but be
       careful not to hang yourself with it!”

 CS 61C L03 C Arrays (30)                  A Carle, Summer 2005 © UCB

More Related Content

What's hot

Optimal Budget Allocation: Theoretical Guarantee and Efficient Algorithm
Optimal Budget Allocation: Theoretical Guarantee and Efficient AlgorithmOptimal Budget Allocation: Theoretical Guarantee and Efficient Algorithm
Optimal Budget Allocation: Theoretical Guarantee and Efficient AlgorithmTasuku Soma
 
Implementation of Energy Efficient Scalar Point Multiplication Techniques for...
Implementation of Energy Efficient Scalar Point Multiplication Techniques for...Implementation of Energy Efficient Scalar Point Multiplication Techniques for...
Implementation of Energy Efficient Scalar Point Multiplication Techniques for...idescitation
 
Demand-Driven Context-Sensitive Alias Analysis for Java
Demand-Driven Context-Sensitive Alias Analysis for JavaDemand-Driven Context-Sensitive Alias Analysis for Java
Demand-Driven Context-Sensitive Alias Analysis for JavaDacong (Tony) Yan
 
Maximizing Submodular Function over the Integer Lattice
Maximizing Submodular Function over the Integer LatticeMaximizing Submodular Function over the Integer Lattice
Maximizing Submodular Function over the Integer LatticeTasuku Soma
 
Dsp model exam qp
Dsp model exam qpDsp model exam qp
Dsp model exam qpRama Dhurai
 
LR(0) parser in Compiler Consturction
LR(0) parser in Compiler ConsturctionLR(0) parser in Compiler Consturction
LR(0) parser in Compiler ConsturctionMuhammad Haroon
 
Multicasting in Linear Deterministic Relay Network by Matrix Completion
Multicasting in Linear Deterministic Relay Network by Matrix CompletionMulticasting in Linear Deterministic Relay Network by Matrix Completion
Multicasting in Linear Deterministic Relay Network by Matrix CompletionTasuku Soma
 
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 1
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 1ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 1
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 1zukun
 
Model Checking Base on Interoplation
Model Checking Base onInteroplationModel Checking Base onInteroplation
Model Checking Base on Interoplationleticia2307
 
B.tech admission in india
B.tech admission in indiaB.tech admission in india
B.tech admission in indiaEdhole.com
 
Register Allocation
Register AllocationRegister Allocation
Register AllocationEelco Visser
 
Sensor networks, point processes and homology
Sensor networks, point processes and homology Sensor networks, point processes and homology
Sensor networks, point processes and homology decreuse
 

What's hot (20)

Optimal Budget Allocation: Theoretical Guarantee and Efficient Algorithm
Optimal Budget Allocation: Theoretical Guarantee and Efficient AlgorithmOptimal Budget Allocation: Theoretical Guarantee and Efficient Algorithm
Optimal Budget Allocation: Theoretical Guarantee and Efficient Algorithm
 
Implementation of Energy Efficient Scalar Point Multiplication Techniques for...
Implementation of Energy Efficient Scalar Point Multiplication Techniques for...Implementation of Energy Efficient Scalar Point Multiplication Techniques for...
Implementation of Energy Efficient Scalar Point Multiplication Techniques for...
 
20320140501020
2032014050102020320140501020
20320140501020
 
Demand-Driven Context-Sensitive Alias Analysis for Java
Demand-Driven Context-Sensitive Alias Analysis for JavaDemand-Driven Context-Sensitive Alias Analysis for Java
Demand-Driven Context-Sensitive Alias Analysis for Java
 
Maximizing Submodular Function over the Integer Lattice
Maximizing Submodular Function over the Integer LatticeMaximizing Submodular Function over the Integer Lattice
Maximizing Submodular Function over the Integer Lattice
 
Dsp model exam qp
Dsp model exam qpDsp model exam qp
Dsp model exam qp
 
LR(0) parser in Compiler Consturction
LR(0) parser in Compiler ConsturctionLR(0) parser in Compiler Consturction
LR(0) parser in Compiler Consturction
 
Multicasting in Linear Deterministic Relay Network by Matrix Completion
Multicasting in Linear Deterministic Relay Network by Matrix CompletionMulticasting in Linear Deterministic Relay Network by Matrix Completion
Multicasting in Linear Deterministic Relay Network by Matrix Completion
 
Matlab bode diagram_instructions
Matlab bode diagram_instructionsMatlab bode diagram_instructions
Matlab bode diagram_instructions
 
Absorbing Random Walk Centrality
Absorbing Random Walk CentralityAbsorbing Random Walk Centrality
Absorbing Random Walk Centrality
 
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 1
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 1ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 1
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 1
 
8th Semester (Dec-2013) Electronic and Communication Engineering Question Pap...
8th Semester (Dec-2013) Electronic and Communication Engineering Question Pap...8th Semester (Dec-2013) Electronic and Communication Engineering Question Pap...
8th Semester (Dec-2013) Electronic and Communication Engineering Question Pap...
 
Lecture13
Lecture13Lecture13
Lecture13
 
Ch9a
Ch9aCh9a
Ch9a
 
Mapping analysis
Mapping analysisMapping analysis
Mapping analysis
 
Model Checking Base on Interoplation
Model Checking Base onInteroplationModel Checking Base onInteroplation
Model Checking Base on Interoplation
 
B.tech admission in india
B.tech admission in indiaB.tech admission in india
B.tech admission in india
 
Register Allocation
Register AllocationRegister Allocation
Register Allocation
 
A HIGH THROUGHPUT AES DESIGN
A HIGH THROUGHPUT AES DESIGNA HIGH THROUGHPUT AES DESIGN
A HIGH THROUGHPUT AES DESIGN
 
Sensor networks, point processes and homology
Sensor networks, point processes and homology Sensor networks, point processes and homology
Sensor networks, point processes and homology
 

Viewers also liked

C Pointers
C PointersC Pointers
C Pointersomukhtar
 
Arrays and pointers
Arrays and pointersArrays and pointers
Arrays and pointersKevin Nguyen
 
C programming - Pointers
C programming - PointersC programming - Pointers
C programming - PointersWingston
 
Excel shortcut and function keys hindi notes
Excel shortcut and function keys hindi notesExcel shortcut and function keys hindi notes
Excel shortcut and function keys hindi notesSirajRock
 
introduction to c language
 introduction to c language introduction to c language
introduction to c languageRai University
 
Microsoft office hindi notes
Microsoft office hindi notesMicrosoft office hindi notes
Microsoft office hindi notesSirajRock
 
Computer fundamentals hindi notes
Computer fundamentals hindi notesComputer fundamentals hindi notes
Computer fundamentals hindi notesSirajRock
 
10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation OptimizationOneupweb
 
Masters of SlideShare
Masters of SlideShareMasters of SlideShare
Masters of SlideShareKapost
 
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great InfographicsSlideShare
 
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareSTOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareEmpowered Presentations
 
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingHow To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingContent Marketing Institute
 

Viewers also liked (20)

Pointers in C Programming
Pointers in C ProgrammingPointers in C Programming
Pointers in C Programming
 
Pointers
PointersPointers
Pointers
 
C Pointers
C PointersC Pointers
C Pointers
 
Arrays and pointers
Arrays and pointersArrays and pointers
Arrays and pointers
 
Fucntions & Pointers in C
Fucntions & Pointers in CFucntions & Pointers in C
Fucntions & Pointers in C
 
C language
C languageC language
C language
 
Pointers+(2)
Pointers+(2)Pointers+(2)
Pointers+(2)
 
Pointers in C
Pointers in CPointers in C
Pointers in C
 
C programming - Pointers
C programming - PointersC programming - Pointers
C programming - Pointers
 
Excel shortcut and function keys hindi notes
Excel shortcut and function keys hindi notesExcel shortcut and function keys hindi notes
Excel shortcut and function keys hindi notes
 
introduction to c language
 introduction to c language introduction to c language
introduction to c language
 
Microsoft office hindi notes
Microsoft office hindi notesMicrosoft office hindi notes
Microsoft office hindi notes
 
Computer fundamentals hindi notes
Computer fundamentals hindi notesComputer fundamentals hindi notes
Computer fundamentals hindi notes
 
Pointers in C
Pointers in CPointers in C
Pointers in C
 
Unit 6 pointers
Unit 6   pointersUnit 6   pointers
Unit 6 pointers
 
10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization
 
Masters of SlideShare
Masters of SlideShareMasters of SlideShare
Masters of SlideShare
 
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great Infographics
 
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareSTOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
 
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingHow To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
 

Similar to CS61C C Arrays and Pointers Lecture

The 8051 assembly language
The 8051 assembly languageThe 8051 assembly language
The 8051 assembly languagehemant meena
 
Acm aleppo cpc training second session
Acm aleppo cpc training second sessionAcm aleppo cpc training second session
Acm aleppo cpc training second sessionAhmad Bashar Eter
 
PVS-Studio team experience: checking various open source projects, or mistake...
PVS-Studio team experience: checking various open source projects, or mistake...PVS-Studio team experience: checking various open source projects, or mistake...
PVS-Studio team experience: checking various open source projects, or mistake...Andrey Karpov
 
17419 advance surveying
17419   advance surveying17419   advance surveying
17419 advance surveyingsoni_nits
 
Lec08-CS110 Computational Engineering
Lec08-CS110 Computational EngineeringLec08-CS110 Computational Engineering
Lec08-CS110 Computational EngineeringSri Harsha Pamu
 
Learning C++ - Pointers in c++ 2
Learning C++ - Pointers in c++ 2Learning C++ - Pointers in c++ 2
Learning C++ - Pointers in c++ 2Ali Aminian
 
C++ memory leak detection
C++ memory leak detectionC++ memory leak detection
C++ memory leak detectionVõ Hòa
 
C language programming
C language programmingC language programming
C language programmingpullarao29
 

Similar to CS61C C Arrays and Pointers Lecture (20)

The 8051 assembly language
The 8051 assembly languageThe 8051 assembly language
The 8051 assembly language
 
Acm aleppo cpc training second session
Acm aleppo cpc training second sessionAcm aleppo cpc training second session
Acm aleppo cpc training second session
 
PVS-Studio team experience: checking various open source projects, or mistake...
PVS-Studio team experience: checking various open source projects, or mistake...PVS-Studio team experience: checking various open source projects, or mistake...
PVS-Studio team experience: checking various open source projects, or mistake...
 
C- language Lecture 5
C- language Lecture 5C- language Lecture 5
C- language Lecture 5
 
17419 advance surveying
17419   advance surveying17419   advance surveying
17419 advance surveying
 
Ch8 Arrays
Ch8 ArraysCh8 Arrays
Ch8 Arrays
 
4.ArraysInC.pdf
4.ArraysInC.pdf4.ArraysInC.pdf
4.ArraysInC.pdf
 
Lec08-CS110 Computational Engineering
Lec08-CS110 Computational EngineeringLec08-CS110 Computational Engineering
Lec08-CS110 Computational Engineering
 
8th Semester (June; July-2014) Computer Science and Information Science Engin...
8th Semester (June; July-2014) Computer Science and Information Science Engin...8th Semester (June; July-2014) Computer Science and Information Science Engin...
8th Semester (June; July-2014) Computer Science and Information Science Engin...
 
3rd Semester (June; July-2014) Civil Engineering Question Papers
3rd Semester (June; July-2014) Civil Engineering Question Papers3rd Semester (June; July-2014) Civil Engineering Question Papers
3rd Semester (June; July-2014) Civil Engineering Question Papers
 
C language programming
C language programmingC language programming
C language programming
 
Learning C++ - Pointers in c++ 2
Learning C++ - Pointers in c++ 2Learning C++ - Pointers in c++ 2
Learning C++ - Pointers in c++ 2
 
Pcd201516
Pcd201516Pcd201516
Pcd201516
 
C++ memory leak detection
C++ memory leak detectionC++ memory leak detection
C++ memory leak detection
 
C language programming
C language programmingC language programming
C language programming
 
Pointers
PointersPointers
Pointers
 
2nd Semester M Tech: VLSI Design and Embedded System (June-2016) Question Papers
2nd Semester M Tech: VLSI Design and Embedded System (June-2016) Question Papers2nd Semester M Tech: VLSI Design and Embedded System (June-2016) Question Papers
2nd Semester M Tech: VLSI Design and Embedded System (June-2016) Question Papers
 
C –FAQ:
C –FAQ:C –FAQ:
C –FAQ:
 
20130523 05 - Cyclomatic complexity
20130523 05 - Cyclomatic complexity20130523 05 - Cyclomatic complexity
20130523 05 - Cyclomatic complexity
 
Cs 64
Cs 64Cs 64
Cs 64
 

More from Balaji Ravi

Quest_Software_Best_Practices_for_Exchange_2007
Quest_Software_Best_Practices_for_Exchange_2007Quest_Software_Best_Practices_for_Exchange_2007
Quest_Software_Best_Practices_for_Exchange_2007Balaji Ravi
 
forgot_administrator_password.htm
forgot_administrator_password.htmforgot_administrator_password.htm
forgot_administrator_password.htmBalaji Ravi
 
lost-xp-password.html
lost-xp-password.htmllost-xp-password.html
lost-xp-password.htmlBalaji Ravi
 
Upgrading_and_Migrating_to_Exchange_Server_2007_and_Windows_2008
Upgrading_and_Migrating_to_Exchange_Server_2007_and_Windows_2008Upgrading_and_Migrating_to_Exchange_Server_2007_and_Windows_2008
Upgrading_and_Migrating_to_Exchange_Server_2007_and_Windows_2008Balaji Ravi
 
Practical-LDAP-and-Linux
Practical-LDAP-and-LinuxPractical-LDAP-and-Linux
Practical-LDAP-and-LinuxBalaji Ravi
 
3852_wlan_revised
3852_wlan_revised3852_wlan_revised
3852_wlan_revisedBalaji Ravi
 
Virtualizing_Exchange2003
Virtualizing_Exchange2003Virtualizing_Exchange2003
Virtualizing_Exchange2003Balaji Ravi
 

More from Balaji Ravi (17)

Quest_Software_Best_Practices_for_Exchange_2007
Quest_Software_Best_Practices_for_Exchange_2007Quest_Software_Best_Practices_for_Exchange_2007
Quest_Software_Best_Practices_for_Exchange_2007
 
forgot_administrator_password.htm
forgot_administrator_password.htmforgot_administrator_password.htm
forgot_administrator_password.htm
 
lost-xp-password.html
lost-xp-password.htmllost-xp-password.html
lost-xp-password.html
 
Upgrading_and_Migrating_to_Exchange_Server_2007_and_Windows_2008
Upgrading_and_Migrating_to_Exchange_Server_2007_and_Windows_2008Upgrading_and_Migrating_to_Exchange_Server_2007_and_Windows_2008
Upgrading_and_Migrating_to_Exchange_Server_2007_and_Windows_2008
 
1.Routing-eng
1.Routing-eng1.Routing-eng
1.Routing-eng
 
Practical-LDAP-and-Linux
Practical-LDAP-and-LinuxPractical-LDAP-and-Linux
Practical-LDAP-and-Linux
 
b
bb
b
 
bldef_ap.htm
bldef_ap.htmbldef_ap.htm
bldef_ap.htm
 
exch2003
exch2003exch2003
exch2003
 
10307021
1030702110307021
10307021
 
show.php.htm
show.php.htmshow.php.htm
show.php.htm
 
182
182182
182
 
3852_wlan_revised
3852_wlan_revised3852_wlan_revised
3852_wlan_revised
 
a
aa
a
 
cryptography
cryptographycryptography
cryptography
 
Virtualizing_Exchange2003
Virtualizing_Exchange2003Virtualizing_Exchange2003
Virtualizing_Exchange2003
 
Balaji
BalajiBalaji
Balaji
 

CS61C C Arrays and Pointers Lecture

  • 1. inst.eecs.berkeley.edu/~cs61c/su05 CS61C : Machine Structures Lecture #3: C Pointers & Arrays 2005-06-22 Andy Carle CS 61C L03 C Arrays (1) A Carle, Summer 2005 © UCB
  • 2. Address vs. Value • What good is a bunch of memory if you can’t select parts of it? • Each memory cell has an address associated with it. • Each cell also stores some value. • Don’t confuse the address referring to a memory location with the value stored in that location. 101 102 103 104 105 ... ... 23 42 ... CS 61C L03 C Arrays (2) A Carle, Summer 2005 © UCB
  • 3. Pointers • A pointer is just a C variable whose value is the address of another variable! • After declaring a pointer: int *ptr; ptr doesn’t actually point to anything yet. We can either: • make it point to something that already exists, or • allocate room in memory for something new that it will point to… (next time) CS 61C L03 C Arrays (3) A Carle, Summer 2005 © UCB
  • 4. Pointers • Declaring a pointer just allocates space to hold the pointer – it does not allocate something to be pointed to! • Local variables in C are not initialized, they may contain anything. CS 61C L03 C Arrays (4) A Carle, Summer 2005 © UCB
  • 5. Pointer Usage Example 0xffff ffff Memory and Pointers: 0xcafe 0000 0xbeef 0000 0x0000 0004 0x0000 0000 CS 61C L03 C Arrays (5) A Carle, Summer 2005 © UCB
  • 6. Pointer Usage Example 0xffff ffff Memory and Pointers: int *p, v; v: 0xXXXXXXXX 0xcafe 0000 p: 0xXXXXXXXX 0xbeef 0000 0x0000 0004 0x0000 0000 CS 61C L03 C Arrays (6) A Carle, Summer 2005 © UCB
  • 7. Pointer Usage Example 0xffff ffff Memory and Pointers: int *p, v; v: 0xXXXXXXXX 0xcafe 0000 p = &v; p: 0xcafe 0000 0xbeef 0000 0x0000 0004 0x0000 0000 CS 61C L03 C Arrays (7) A Carle, Summer 2005 © UCB
  • 8. Pointer Usage Example 0xffff ffff Memory and Pointers: int *p, v; v: 0x0000 0017 0xcafe 0000 p = &v; p: 0xcafe 0000 0xbeef 0000 v = 0x17; 0x0000 0004 0x0000 0000 CS 61C L03 C Arrays (8) A Carle, Summer 2005 © UCB
  • 9. Pointer Usage Example 0xffff ffff Memory and Pointers: int *p, v; v: 0x0000 001b 0xcafe 0000 p = &v; p: 0xcafe 0000 0xbeef 0000 v = 0x17; *p = *p + 4; 0x0000 0004 0x0000 0000 V = *p + 4 CS 61C L03 C Arrays (9) A Carle, Summer 2005 © UCB
  • 10. Pointers in C • Why use pointers? • If we want to pass a huge struct or array, it’s easier to pass a pointer than the whole thing. • In general, pointers allow cleaner, more compact code. • So what are the drawbacks? • Pointers are probably the single largest source of bugs in software, so be careful anytime you deal with them. • Dangling reference (premature free) • Memory leaks (tardy free) CS 61C L03 C Arrays (10) A Carle, Summer 2005 © UCB
  • 11. C Pointer Dangers • What does the following code do? void f() { int *ptr; *ptr = 5; } • S E G F A U L T ! (on my machine/os) • (Not a nice compiler error like you would hope!) CS 61C L03 C Arrays (11) A Carle, Summer 2005 © UCB
  • 12. C Pointer Dangers • Unlike Java, C lets you cast a value of any type to any other type without performing any checking. int x = 1000; int *p = x; /* invalid */ int *q = (int *) x; /* valid */ • The first pointer declaration is invalid since the types do not match. • The second declaration is valid C but is almost certainly wrong • Is it ever correct? CS 61C L03 C Arrays (12) A Carle, Summer 2005 © UCB
  • 13. Pointers and Parameter Passing • Java and C pass a parameter “by value” • procedure/function gets a copy of the parameter, so changing the copy cannot change the original void addOne (int x) { x = x + 1; } int y = 3; addOne(y); •y is still = 3 CS 61C L03 C Arrays (13) A Carle, Summer 2005 © UCB
  • 14. Pointers and Parameter Passing • How to get a function to change a value? void addOne (int *p) { *p = *p + 1; } int y = 3; addOne(&y); •y is now = 4 CS 61C L03 C Arrays (14) A Carle, Summer 2005 © UCB
  • 15. Arrays (1/7) • Declaration: int ar[2]; declares a 2-element integer array. int ar[] = {795, 635}; declares and fills a 2-elt integer array. • Accessing elements: ar[num]; returns the num t h element from 0. CS 61C L03 C Arrays (15) A Carle, Summer 2005 © UCB
  • 16. Arrays (2/7) • Arrays are (almost) identical to pointers •char *string and char string[] are nearly identical declarations • They differ in very subtle ways: incrementing, declaration of filled arrays • Key Difference: An array variable is a CONSTANT pointer to the first element. CS 61C L03 C Arrays (16) A Carle, Summer 2005 © UCB
  • 17. Arrays (3/7) • Consequences: •ar is a pointer •ar[0] is the same as *ar •ar[2] is the same as *(ar+2) • We can use pointer arithmetic to access arrays more conveniently. • Declared arrays are only allocated while the scope is valid char *foo() { char string[32]; ...; return string; } is incorrect CS 61C L03 C Arrays (17) A Carle, Summer 2005 © UCB
  • 18. Arrays (4/7) • Array size n; want to access from 0 to n-1: int ar[10], i=0, sum = 0; ... while (i < 10) /* sum = sum+ar[i]; i = i + 1; */ sum += ar[i++]; CS 61C L03 C Arrays (18) A Carle, Summer 2005 © UCB
  • 19. Arrays (5/7) • Array size n; want to access from 0 to n-1, so you should use counter AND utilize a constant for declaration & incr • Wrong int i, ar[10]; for(i = 0; i < 10; i++){ ... } • Right #define ARRAY_SIZE 10 int i, a[ARRAY_SIZE]; for(i = 0; i < ARRAY_SIZE; i++){ ... } • Why? SINGLE SOURCE OF TRUTH • You’re utilizing indirection and avoiding maintaining two copies of the number 10 CS 61C L03 C Arrays (19) A Carle, Summer 2005 © UCB
  • 20. Arrays (6/7) • Pitfall: An array in C does not know its own length, & bounds not checked! • Consequence: We can accidentally access off the end of an array. • Consequence: We must pass the array and its size to a procedure which is going to traverse it. • Segmentation faults and bus errors: • These are VERY difficult to find; be careful! • You’ll learn how to debug these in lab… CS 61C L03 C Arrays (20) A Carle, Summer 2005 © UCB
  • 21. Arrays 7/7: In Functions • An array parameter can be declared as an array or a pointer; an array argument can be passed as a pointer. • Can be incremented int strlen(char s[]) int strlen(char *s) { { int n = 0; int n = 0; while (s[n] != 0) while (s[n] != 0) n++; n++; return n; return n; } } Could be written: while (s[n]) CS 61C L03 C Arrays (21) A Carle, Summer 2005 © UCB
  • 22. Pointer Arithmetic (1/5) • Since a pointer is just a mem address, we can add to it to traverse an array. • p+1 returns a ptr to the next array elt. •(*p)+1 vs *p++ vs *(p+1) vs *(p)++ ? • x = *p++ ⇒ x = *p ; p = p + 1; • x = (*p)++ ⇒ x = *p ; *p = *p + 1; • What if we have an array of large structs (objects)? • C takes care of it: In reality, p+1 doesn’t add 1 to the memory address, it adds the size of the array element. CS 61C L03 C Arrays (22) A Carle, Summer 2005 © UCB
  • 23. Pointer Arithmetic (2/5) • So what’s valid pointer arithmetic? • Add an integer to a pointer. • Subtract 2 pointers (in the same array). • Compare pointers (<, <=, ==, !=, >, >=) • Compare pointer to NULL (indicates that the pointer points to nothing). • Everything else is illegal since it makes no sense: • adding two pointers • multiplying pointers • subtract pointer from integer CS 61C L03 C Arrays (23) A Carle, Summer 2005 © UCB
  • 24. Pointer Arithmetic (3/5) • We can use pointer arithmetic to “walk” through memory: void copy(int *from, int *to, int n) { int i; for (i=0; i<n; i++) { *to++ = *from++; } } ° C automatically adjusts the pointer by the right amount each time (i.e., 1 byte for a char, 4 bytes for an int, etc.) CS 61C L03 C Arrays (24) A Carle, Summer 2005 © UCB
  • 25. Pointer Arithmetic (4/5) • C knows the size of the thing a pointer points to – every addition or subtraction moves that many bytes. • So the following are equivalent: int get(int array[], int n) { return (array[n]); /* OR */ return *(array + n); } CS 61C L03 C Arrays (25) A Carle, Summer 2005 © UCB
  • 26. Pointer Arithmetic (5/5) • Array size n; want to access from 0 to n-1 • test for exit by comparing to address one element past the array int ar[10], *p, *q, sum = 0; ... p = ar; q = &(ar[10]); while (p != q) /* sum = sum + *p; p = p + 1; */ sum += *p++; • Is this legal? • C defines that one element past end of array must be a valid address, i.e., not cause an bus error or address error CS 61C L03 C Arrays (26) A Carle, Summer 2005 © UCB
  • 27. Pointer Arithmetic Summary •x =*(p+1)? ⇒ x = *(p+1) ; •x =*p+1 ? ⇒ x = (*p) + 1 ; • x =(*p)++ ? ⇒ x = *p ; *p = *p + 1; •x =*p++ ? (*p++) ? *(p)++ ? *(p++) ? ⇒ x = *p ; p = p + 1; •x =*++p ? ⇒ p = p + 1 ; x = *p ; • Lesson? • These cause more problems than they solve! CS 61C L03 C Arrays (27) A Carle, Summer 2005 © UCB
  • 28. Pointer Arithmetic Peer Instruction Q How many of the following are invalid? I. pointer + integer II. integer + pointer III. pointer + pointer IV. pointer – integer V. integer – pointer VI. pointer – pointer VII. compare pointer to pointer VIII. compare pointer to integer IX. compare pointer to 0 X. compare pointer to NULL CS 61C L03 C Arrays (28) A Carle, Summer 2005 © UCB
  • 29. Pointer Arithmetic Peer Instruction A • How many of the following are invalid? I. pointer + integer ptr + 1 II. integer + pointer 1 + ptr III. pointer + pointer ptr + ptr IV. pointer – integer ptr - 1 V. integer – pointer 1 - ptr VI. pointer – pointer ptr - ptr VII. compare pointer to pointer ptr1 == ptr2 VIII. compare pointer to integer ptr == 1 IX. compare pointer to 0 ptr == NULL X. compare pointer to NULL ptr == NULL CS 61C L03 C Arrays (29) A Carle, Summer 2005 © UCB
  • 30. “And in Conclusion…” • Pointers and arrays are virtually same • C knows how to increment pointers • C is an efficient language, with little protection • Array bounds not checked • Variables not automatically initialized • (Beware) The cost of efficiency is more overhead for the programmer. • “C gives you a lot of extra rope but be careful not to hang yourself with it!” CS 61C L03 C Arrays (30) A Carle, Summer 2005 © UCB