pointers character values
play

Pointers Character Values There are a fixed number of char values - PDF document

Pointers Character Values There are a fixed number of char values Examples: a b \n Number of possibilities : the number of chars 1 A char Variable Pointer Values There are a fixed number of pointer values Assume a 32 bit


  1. Pointers Character Values • There are a fixed number of char values Examples: ’a’ ’b’ ’\n’ Number of possibilities : the number of chars 1

  2. A char Variable Pointer Values There are a fixed number of pointer values Assume a 32 bit address space Examples : 00000000, FACC432F, ... One different pointer value per address... 2

  3. Pointer Values(Constants) The & operator & is the address operator • Provides a pointer constant to any named location • Example: &aChar • Use %p to print an address 3

  4. Printing Pointers What does it print ? 142300 142301 Pointers : 4 byte Integers Address of a variable is: Address of the first byte of the variable 4

  5. Pointer Variables Possible to define variables holding pointers Pointer Variables: – Contain a pointer constant (i.e., an address) – Can have value changed – “Point” to a specific type of data – Many variables can point to the same value! Pointer Variables 5

  6. Schematic : Pointer Variables Accessing the Variables The Operator * is the Indirection operator “Dereferencing” often read as “contents of” p = &a; c = *p + 43; Add 43 to (*p) what p points to Assign this number to variable c 6

  7. Examples : Get them right !! Declaring Pointer Variables Examples: char *p; int *q; float *r; long double *s; long long int *t; 7

  8. Uninitialized Pointers As with all variables in C: If you don’t initialize you get whatever junk is found at that time !!! BEWARE: Uninitialized pointers contain some address Uninitialized Pointers p could be even pointing to your program ??? 8

  9. Initializing : Be safe - to nowhere What if a pointer variable shouldn’t point anywhere? Answer: set it to NULL int *p; p = NULL; NULL is pre-defined by “C” in stdio.h or stddef.h Initialization to Somewhere int a; int *p; p = &a; Remember : • Never try to dereference a NULL pointer • Gives run-time error (a segmentation fault ??) 9

  10. Example : Add using pointers Work out the code to set r = a + b… *pr = *pa + *pb; Pointers as Parameters C uses pass by value!! To modify a passed variable: Pass the address Modify the contents In other words : Pass the pointer !!! 10

  11. Returning Pointer Variables Suppose we want to return a pointer? Then declare the return type to be a pointer Example: int *smaller (int *p1, int *p2); It returns a pointer to an integer... 11

  12. Returning Pointer Variables Local Pointers : A Serious Error Never return a pointer to a local variable float *mistake() { float temp = 12; return &temp; } Points to space on stack that isn’t used !! 12

  13. Pointers to pointers If a pointer variable “points” somewhere: Why not to another pointer variable?? Ans. Of course you can do it. int **p; This variable pointer to a pointer which points to an integer... Pointers to Pointers 13

  14. Using Pointer to Pointers… Declare code for r , q , p , a where a is a float float a, *p, **q, ***r ; Using Pointer to Pointers… Use scanf with each of these variables scanf(“%d”, &a) scanf(“%d”, p) scanf(“%d”, *q) scanf(“%d”, **r) 14

  15. Sizes and Compatibility char c; char *pc; int a; int *pa; double x; double *px; Print sizeof(c), sizeof(pc), sizeof(*pc)… Size and Compatibility sizeof(c)= 1 sizeof(pc)= 4 sizeof(*pc)= 1 sizeof(a)= 4 sizeof(pa)= 4 sizeof(*pa)= 4 sizeof(x)= 8 sizeof(px)= 4 sizeof(*px)= 8 What can you learn : • Generally speaking Pointers are all the same size • They may be of diff. sizes for structures etc. • The contents of a pointer know their size & type 15

  16. Types & Validity Type and Validity : Get it right 16

  17. Using Expressions Expressions evaluate to a value Expressions are classified by: How they can be used There are two kinds of expressions : lvalue and rvalue expressions lvalue and rvalue Either Assigned or Evaluated An lvalue expression is to be used Whenever it is receiving a value Valid on the LHS LHS can ONLY have an lvalue An rvalue expression is to be used To supply a value for further use Valid on the RHS of an assignment 17

  18. The 7 lvalues (Blue not covered yet) Expression Type Comments 1 Identifier x Variable identifier 2 Identifier[] A[i] Array indexing 3 (expression) (A+7) Expression must be lvalue 4 *expression *(A+7) Dereference expression 5 expression.name Structure selection 6 expression->name Structure indirect selection 7 function call If returning an address lvalue expressions a = … a[5] = … (a) = … *p = … All non-lvalue expressions are rvalue expressions 18

  19. Some Operators Require lvalues Anything that can be changed Type of Operator Examples Address Operator &score x++ y-- Postfix increment / decrement ++x --y Prefix increment / decrement Assignment (left operand) x= 1 y +=4 Mistakes The following are rvalue expressions where there should be an lvalue. Expression Problem a+2 = 6; a+2 is an rvalue can’t be modified &(a+2); a+2 is rvalue address requires lvalue &4; Same as above (a+2)++; Postfix inc. needs an lvalue ++(4-b); Prefix inc. needs an lvalue 19

  20. Returning multiple values Definition: /*The function may return an error code */ int SecondsToHours(long time, int *hours, int *minutes, int *secs) { /* what is this code? */ …. *hours = time/3600 ; …. } Returns a value 1 if the computation fails Calling code: SecondsToHours(totalTime,&hrs,&min,&s); 20

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend