1 / 24

C programming---Pointers

C programming---Pointers. The first step: visualizing what pointers represent at the machine level. In most modern computers, main memory is divided into bytes. Each byte can hold 8 bits of information:. Each byte has a unique address in memory. Address. Address. Contents. 0. 1. 2. 3.

Download Presentation

C programming---Pointers

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C programming---Pointers The first step: visualizing what pointers represent at the machine level. In most modern computers, main memory is divided into bytes. Each byte can hold 8 bits of information: Each byte has a unique address in memory.

  2. Address Address Contents 0 1 2 3 n-1

  3. Address int i = 9;/* suppose sizeof(int) = 4 The address of variable i is 0xFA83 0xFA83 0xFA84 0xFA85 0xFA86

  4. Pointer Variables Use a pointer variable p to store the address of a variable i, and we say p “points to” i 0xFA83 0xFA84 0xFA85 0xFA86 p

  5. Declaring Pointer Variables int *p; // p is a pointer variable capable of pointing to objects of type int char *str; double *q; C requires that every pointer variable point to objects of a particular type(the referenced type) There are no restrictions on what referenced type may be. In fact, a pointer variable can even point to another pointer.

  6. The Address and Indirection Operators • int i, *p; • ……. • p = &i; • int i; • int *p = &i; • int i, p = &i;

  7. The Address and Indirection Operators printf(“%d\n”, *p); j = *&i;

  8. The Address and Indirection Operators int i, *p = &i; i = 1; printf(“i = %d\n”, i); printf(“*p = %d\n”, *p); *p = 4; printf(“i = %d\n”, i); printf(“*p = %d\n”, *p);

  9. Something to remember Never apply the indirection operator to an uninitialized pointer variable. int *p; printf(“%d”, *p); Unless you know where a pointer points to, do not make an assignment to the pointer

  10. Pointer Assignment int i, j, *p, *q; p = *i; q = p; p i q

  11. Pointer Assignment int i, j, *p, *q; p = &i; q = &j; *q = *p; p i q

  12. Pointer as Arguments Example 2.c

  13. Using const to Protect Arguments When we call a function and pass it a pointer to a variable, we normally assume that the function will modify the variable. Sometimes we just want to examine the value of a variable, not change it. Using pointer might be efficient: time and memory space void f(const int *p) { *p = 0; // wrong: p is a pointer to a “constant integer” }

  14. Pointers as Return Values int *max(int *a, int *b) { if(*a > *b) return a; else return b; } int *p = max(&a, &b);

  15. Be careful int *f(void) { int a; …… return &a; }

  16. Pointers and Arrays Pointer Arithmetic int a[10], *p; p = &a[0]; a p

  17. Pointer Arithmetic p q p = &a[2]; q = p + 3; p += 4;

  18. Comparing Pointers Using the relational operators( <, <=, >, >=) and the equality operator (== and !=) int *p = &a[5]; int *q = &a[1]; The value of p <= q is 0(false) The value of p >= q is 1(true)

  19. Using Pointers for Array Processing #define N 10 int a[N], sum, *p; sum = 0; for(p = &a[0]; p < &a[N]; p++) sum += *p;

  20. Combining the * and ++ Operators *p++ or *(p++) (*p)++ *++p or *(++p) ++*p or ++(*p) The postfix version of ++ takes precedence over * See 3.c

  21. Using an Array Name as a Pointer int a[10]; *a = 7; // modify a[0] *(a + 2) = 13; // modify a[2] while( *a != 0 ) a++; // wrong

  22. Array Arguments int find_largest(int a[], int n) { } int find_largest(int *a, int n) { }

  23. Using a Pointer as an Array Name #define N 10 ….. int a[N], i, sum = 0, *p = a; ….. for(i =0; i < N; i++) sum += p[i];

  24. Pointers and Multidimensional Arrays int a[NUM_ROWS][NUM_COLS]; int row, col; for(row = 0; row < NUM_ROWS; row++) for(row = 0; row < NUM_ROWS; row++) a[row][col] = 0; int *p; for(p = &a[0][0]; p <= &a[NUM_ROWS-1][NUM_COLS]; p++) *p = 0;

More Related