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

pointers character values
SMART_READER_LITE
LIVE PREVIEW

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


slide-1
SLIDE 1

1

Pointers Character Values

  • There are a fixed number of char values

Examples: ’a’ ’b’ ’\n’ Number of possibilities : the number of chars

slide-2
SLIDE 2

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...

slide-3
SLIDE 3

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
slide-4
SLIDE 4

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

slide-5
SLIDE 5

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

slide-6
SLIDE 6

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

slide-7
SLIDE 7

7

Examples : Get them right !! Declaring Pointer Variables

Examples:

char *p; int *q; float *r; long double *s; long long int *t;

slide-8
SLIDE 8

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 ???

slide-9
SLIDE 9

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 ??)
slide-10
SLIDE 10

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 !!!

slide-11
SLIDE 11

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...

slide-12
SLIDE 12

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 !!

slide-13
SLIDE 13

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

slide-14
SLIDE 14

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)

slide-15
SLIDE 15

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
slide-16
SLIDE 16

16

Types & Validity Type and Validity : Get it right

slide-17
SLIDE 17

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

slide-18
SLIDE 18

18

The 7 lvalues

(Blue not covered yet)

If returning an address function call 7 Structure indirect selection expression->name 6 Structure selection expression.name 5 Dereference expression *expression *(A+7) 4 Expression must be lvalue (expression) (A+7) 3 Array indexing Identifier[] A[i] 2 Variable identifier Identifier x 1 Comments Expression Type

lvalue expressions

a = … a[5] = … (a) = … *p = …

All non-lvalue expressions are rvalue expressions

slide-19
SLIDE 19

19

Some Operators Require lvalues Anything that can be changed

x= 1 y +=4

Assignment (left operand)

++x --y

Prefix increment / decrement

x++ y--

Postfix increment / decrement

&score

Address Operator Examples Type of Operator

Mistakes

The following are rvalue expressions where there should be an lvalue.

a+2 is an rvalue can’t be modified a+2 is rvalue address requires lvalue Same as above Postfix inc. needs an lvalue Prefix inc. needs an lvalue a+2 = 6; &(a+2); &4; (a+2)++; ++(4-b); Problem Expression

slide-20
SLIDE 20

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