jagomart
digital resources
picture1_Pointers


 173x       Filetype PDF       File size 0.83 MB       Source: fac-staff.seattleu.edu


File: Pointers
pointers chapter 9 11 9 dr yingwu zhu outline what is a pointer dynamic memory arrays vs pointers allocation pointer arithmetic return pointers from initializing pointers functions comparing pointers pointers ...

icon picture PDF Filetype PDF | Posted on 02 Feb 2023 | 2 years ago
Partial capture of text on file.
                                                                                                             Pointers
                                                                                                               • What is a pointer
                                                                                                                  o A variable whose value is the 
                                                                                                                    address of another variable
                              Pointers and Arrays                                                                 o p is a pointer to variable v                  p:    11      23
                                                                                                               • Operations
                                                                                                                  o &: address of (reference)                     v:   1000     11
                                                                                                                  o *: indirection (dereference)
                                              CS 217                                                           • Declaration mimics use                                         0
                                                                                                                  o int *p;
                                                                                                                    pis the address of an int
                                                                                                                    (dereference p is an integer)
                                                                                                                  o int v;
                                                                                                                    p = &v;
                                                                                                                    pstores the address of v
                                                                                          1                                                                                                  2
           Pointer Operation Examples                                                                        More Pointer Examples
            • Examples of * and &                                                                              • References (e.g., *p) are variables
                int x, y, *p;                                                                                     int x, y, *px, *py;
                p = &x;               /* p gets the address of x */
                y = *p;               /* y gets the value point to by p */                                        px = &x;               /* px is the address of x*/
                y = *(&x);            /* same as y = x */                                                         *px = 0;               /* sets x to 0 */
            • Unary operators associate right to left                                                             py = px;               /* py also points to x*/
                y = *&x;              /* same as y = *(&x) */                                                     *py += 1;              /* increments x to 1 */
                                                                                                                  y = (*px)++;           /* sets y to 1, x to 2 */
            • Unary operators bind more tightly than binary ones                                               • What about the following? 
                y = *p + 1;           /* same as y = (*p) + 1; */                                                 ++*px
                y = *p++;             /* same as y = *(p++); */                                                   *px++
                                                                                          3                                                                                                  4
         Argument Passing                                                            Pointers and Arrays
          • C functions pass arguments “by value”                                     • Pointers can “walk along” arrays
          • To pass arguments “by reference,” use pointers                               int a[10], *p, x;
           void swap(int x, int  y)       void swap(int *x, int  *y)                     p = &a[0];   /* p gets the address of a[0] */
           {                              {                                              x = *p;      /* x gets a[0]                  */
               int t;                        int t;                                      x = *(p+1);  /* x gets a[1]                  */
               t = x;                        t = *x;
               x = y;                        *x = *y;                                    p = p + 1;   /* p points to a[1]             */
               y = t;                        *y = t;                                     p++;         /* p points to a[2]             */
           }                              }
           int a = 3, b = 7;              int a = 3, b = 7;                           • What about the following?
           swap(a, b);                    swap(&a, &b);
           printf(“%d %d\n”,a,b);         printf(“%d %d\n”,a,b);
            x   3           x   7          x               x                             x = *p++;
            y   7           y   3          y               y                             x = ++*p;
            a   3           a   3          a    3          a   7
            b   7           b   7          b    7          b   3
                                                                       5                                                                           6
         Pointers and Arrays, cont’d                                                 Pointer Arithmetic
          • Array names are constant pointers                                         • Pointer arithmetic takes into account the stride (size of) the 
            int a[10], *p, i;                                                           value pointed to
            p = a;     /* p points to a[0]               */                              long *p;
            a++;     /* Illegal; can’t change a constant */                              p += i;   /* increments p by i elements */
            p++;      /* Legal; p is a variable          */                              p -= i;   /* decrements p by i elements */
          • Subscripting is defined in terms of pointers                                 p++;      /* increments p by 1 element       */
            a[i], *(a+i), i[a]       /* Legal and the same      */                       p--;      /* decrements p by 1 element       */
            &a[i], a+i               /* Legal and the same      */                    • If p and q are pointers to same type T
            p = &a[0]                /* &*(a+0) Æ &*a Æ a */                             p – q     /* number of elements between p and q */
          • Pointers can walk arrays efficiently                                      • Does it make sense to add two pointers?
            p = a;
            for (i = 0; i < 10; i++)
                 printf( “%d\n”, *p++ );
                                                                       7                                                                           8
           Pointer Arithmetic, cont’d                                                                       Pointer & Array Parameters
            •  Comparison operations for pointers                                                            • Formals are not constant; they are variables
                o  <, >, <=, >=, ==, !=
                o  if (p < q) ... ;                                                                          • Passing an array passes a pointer to 1st element
                o pand qmust point to the same array                                                         • Arrays (and only arrays) are passed “by reference”
                o no runtime checks to ensure this
            •  An example                                                                                       void f(T a[]) {. . .}
                int strlen(char *s) {                                                                                 is equivalent to
                     char *p;
                     for (p = s; *p; p++)                                                                       void f(T *a) {. . .}
                         ;
                     return p – s;
                }
                                                                                         9                                                                                               10
           Pointers & Strings                                                                               An Example: String Copy
            • A C string is an array of “char” with NULL at the end                                          • Array version
                                                                                                                void scopy(char s[], char t[]) {
            • String constants denote constant pointers to actual chars                                               int i = 0;
               char *msg = “now is the time”;                                                                         while ((s[i] = t[i]) != ‘\0’)
                                                                                                                           i++;
               char amsg[] = “now is the time”;                                                                 }
               char *msg = amsg;                                                                             • Pointer version
                     /* msgpoints to 1st character of “now is the time” */                                      void scopy(char *s, char *t) {
                                                                                                                      while (*s = *t) {
            • Strings can be used whenever arrays of chars are used                                                        s++;
                                                                                                                           t++;
               putchar(“0123456789”[i]);                                                                              }
                                                                                                                }
               static char digits[] = “0123456789”;                                                          • Idiomatic version
               putchar(digits[i]);                                                                              void scopy(char s[], char t[]) {
                                                                                                                      while (*s++ = *t++)
                                                                                                                           ;
                                                                                        11                      }                                                                        12
         Arrays of Pointers                                                           Arrays of Pointers, cont’d
          • Used to build tabular structures                                           • Initialization example
          • Indirection “*” has lower precedence than “[]”                                char *month(int n) {
                                                                                              static char *name[] = {
          • Declare array of pointers to strings                                                  “January”, “February”, “March”, “April”,
                                                                                                  “May”, “June”, “July”, “August”,
                                                                                                  “September”, “October”, “November”, “December”
            char *line[100];                                                                  };
            char *(line[100]);
          • Reference examples                                                                assert(n >= 1 && n <= 12);
                                                                                              return name[n-1];
                                                                                          }
            line[i]    /* refers to the i-th string */                                 • Another example
            *line[i] /* refers to the 0-th char of the i-th string */                     int a, b;
                                                                                          int *x[] = {&a, &b, &b, &a, NULL};
                                                                      13                                                                            14
         Arrays of Pointers, cont’d                                                   More Examples
          • An array of pointers is a 2-D array                                        • Equivalence example
            int a[10][10];                                                                void f(int *a[10]);
            int *b[10];                                                                   void f(int **a);
          • Array a:                                                                   • Another equivalance example
            o 2-dimensional 10x10 array                                                   void g(int a[][10]);
            o Storage for 100 elements allocated at compile time                          void g(int (*a)[10]);
            o Each row of a has 10 elements, cannot change at runtime                  • Legal in both f and g:
            o a[6] is a constant                                                          **a = 1; 
          • Array b:
            o An array of 10 pointers; each element could point to an array
            o Storage for 10 pointers allocated at compile time
            o Values of these pointers must be initialized at runtime
            o Each row of  b can have a different length (ragged array)
            o b[6] is a variable; b[i] can change at runtime
                                                                      15                                                                            16
The words contained in this file might help you see if this file matches what you are looking for:

...Pointers chapter dr yingwu zhu outline what is a pointer dynamic memory arrays vs allocation arithmetic return from initializing functions comparing to structures as function dim parameters getting the address of variable each in program stored at unique use operator get int num cout...

no reviews yet
Please Login to review.