Storage classes
• A variable in C can have any one of the four
  storage classes.
     1. Automatic variables.
     2. External variables.
     3. Static variables.
     4. Register variables.
AUTOMATIC VARIABLES (LOCAL/INTERNAL)
• Automatic variables are declared inside a function
  in which they are to be utilized.
• They are created when a function is called and
  destroyed automatically when the function is
  exited.
• Eg:main()
  {
      int number;
  }
• We may also use the keyword auto to declare
  automatic variables explicitly.
EXTERNAL VARIABLES
• Variables that are both alive and active throughout
  the entire program are known as external variables.
  They are also known as global variables.
  extern float length = 7.5;
  void main()
  {
  }
  function1( )
  {
  }The keyword extern can be used for explicit
  declarations of external variables.
STATIC VARIABLES
• As the name suggests, the value of a static
  variable persists until the end of the program.
  A variable can be declared static using the
  keyword static.
• Eg:
• 1) static int x;
• 2) static int y;
REGISTER VARIABLES
• We can tell the compiler that a variable
  should be kept in one of the machine’s
  registers, instead of keeping in the memory.

• Since a register access is much faster than a
  memory access, keeping the frequently
  accessed variables in the register will lead to
  faster execution of programs.

• This is done as follows:
     register int count;
POINTERS
• A pointer is a variable that represents the location of a
  data item, such as a variable or an array element.

• A pointer is a memory address.

• In the simplest term pointer is a nearly integer variable
  which stores a memory address of a computer which
  may contain other variable or even another pointer.
Concept of Address and Pointers
• Memory       can  be       ADDR1
                             ADDR2
                                      Contents1

  conceptualized as a        ADDR3
                             ADDR4
  linear set of data         ADDR5
                             ADDR6
  locations.                   *
                               *
                               *

• Variables reference the    ADDR11   Contents11

  contents of a locations      *
                               *

                             ADDR16   Contents16

• Pointers have a value of
  the address of a given
  location
Pointer Variable
• Declaring a pointer variable is quite similar to
  declaring an normal variable all you have to do
  is to insert a star '*' operator before it.

• General form of pointer declaration is -
           type* name;
  For Example
           int * variable1;
• Say you declare a variable named foo.
                    int foo;
• Now let's declare another variable of pointer
  type
             int *foo_ptr = &foo;
  foo_ptr is declared as a pointer to int. We have
  initialized it to point to foo.
Use of & and *

• When is & used?
• When is * used?

• & -- "address operator" which gives or
  produces the memory address of a data
  variable.

• * -- "dereferencing operator" which provides
  the contents in the memory location specified
  by a pointer
#include <stdio.h>
void main (void)
{
   int count = 10, x;
   int *int_pointer;
   int_pointer = &count;
   x = *int_pointer;
   printf ("count = %d, x = %dn", count, x);
}
Using Pointers in Expressions
  #include <stdio.h>
  void main ()
  { int i1, i2;
      int *p1;
      i1 = 5;
      p1 = &i1;
      i2 = *p1 + 20;
printf ("i1 = %d, i2 = %d, *p1 = %d ", i1, i2, *p1);
}
Pointer arithmetic
• Pointers can be added and subtracted.

• However pointer arithmetic is quite meaningless
  unless performed on arrays.

• Addition and subtraction are mainly for moving
  forward and backward in an array.
#include <stdio.h>
void main()
{
  int ArrayA[3]={1,2,3};
  int *ptr;
  ptr=ArrayA;
  printf("address: %p - array value:%d “,ptr,*ptr);
  ptr++;
  printf("address: %p – array value:%d”,ptr,*ptr);
}
Pointers and Functions
• Pointers can be used to pass addresses of
  variables to called functions, thus allowing the
  called function to alter the values stored
  there.

• There are two mechanism to call a function
  1) Pass by Value
  2) Pass By Reference
Pass by Value
#include <stdio.h>
void main ( )
{
  int a = 5, b = 6;               Results:
  printf("a=%d b=%dn",a,b) ;           a=5 b=6
  swap (a, b) ;                         a=6 b=5
  printf("a=%d b=%dn",a,b) ;           a=5 b=6
}
void swap(int a, int b)
{
  int temp;
  temp= a; a= b; b = temp ;
  printf ("a=%d b=%dn", a, b);
}
Pass by Reference
#include <stdio.h>
void main ( )
{
     int a = 5, b = 6;
                                       Results:
     printf("a=%d b=%dn",a,b) ;
                                             a=5 b=6
     swap (&a, &b) ;                         a=6 b=5
     printf("a=%d b=%dn",a,b) ;             a=6 b=5
}
void swap(int *a, int *b)
{
     int temp;
     temp=*a; *a=*b; *b = temp ;
     printf ("a=%d b=%dn", *a, *b);
}

Session 5

  • 1.
    Storage classes • Avariable in C can have any one of the four storage classes. 1. Automatic variables. 2. External variables. 3. Static variables. 4. Register variables.
  • 2.
    AUTOMATIC VARIABLES (LOCAL/INTERNAL) •Automatic variables are declared inside a function in which they are to be utilized. • They are created when a function is called and destroyed automatically when the function is exited. • Eg:main() { int number; } • We may also use the keyword auto to declare automatic variables explicitly.
  • 3.
    EXTERNAL VARIABLES • Variablesthat are both alive and active throughout the entire program are known as external variables. They are also known as global variables. extern float length = 7.5; void main() { } function1( ) { }The keyword extern can be used for explicit declarations of external variables.
  • 4.
    STATIC VARIABLES • Asthe name suggests, the value of a static variable persists until the end of the program. A variable can be declared static using the keyword static. • Eg: • 1) static int x; • 2) static int y;
  • 5.
    REGISTER VARIABLES • Wecan tell the compiler that a variable should be kept in one of the machine’s registers, instead of keeping in the memory. • Since a register access is much faster than a memory access, keeping the frequently accessed variables in the register will lead to faster execution of programs. • This is done as follows: register int count;
  • 6.
    POINTERS • A pointeris a variable that represents the location of a data item, such as a variable or an array element. • A pointer is a memory address. • In the simplest term pointer is a nearly integer variable which stores a memory address of a computer which may contain other variable or even another pointer.
  • 7.
    Concept of Addressand Pointers • Memory can be ADDR1 ADDR2 Contents1 conceptualized as a ADDR3 ADDR4 linear set of data ADDR5 ADDR6 locations. * * * • Variables reference the ADDR11 Contents11 contents of a locations * * ADDR16 Contents16 • Pointers have a value of the address of a given location
  • 8.
    Pointer Variable • Declaringa pointer variable is quite similar to declaring an normal variable all you have to do is to insert a star '*' operator before it. • General form of pointer declaration is - type* name; For Example int * variable1;
  • 9.
    • Say youdeclare a variable named foo. int foo; • Now let's declare another variable of pointer type int *foo_ptr = &foo; foo_ptr is declared as a pointer to int. We have initialized it to point to foo.
  • 10.
    Use of &and * • When is & used? • When is * used? • & -- "address operator" which gives or produces the memory address of a data variable. • * -- "dereferencing operator" which provides the contents in the memory location specified by a pointer
  • 11.
    #include <stdio.h> void main(void) { int count = 10, x; int *int_pointer; int_pointer = &count; x = *int_pointer; printf ("count = %d, x = %dn", count, x); }
  • 12.
    Using Pointers inExpressions #include <stdio.h> void main () { int i1, i2; int *p1; i1 = 5; p1 = &i1; i2 = *p1 + 20; printf ("i1 = %d, i2 = %d, *p1 = %d ", i1, i2, *p1); }
  • 13.
    Pointer arithmetic • Pointerscan be added and subtracted. • However pointer arithmetic is quite meaningless unless performed on arrays. • Addition and subtraction are mainly for moving forward and backward in an array.
  • 14.
    #include <stdio.h> void main() { int ArrayA[3]={1,2,3}; int *ptr; ptr=ArrayA; printf("address: %p - array value:%d “,ptr,*ptr); ptr++; printf("address: %p – array value:%d”,ptr,*ptr); }
  • 15.
    Pointers and Functions •Pointers can be used to pass addresses of variables to called functions, thus allowing the called function to alter the values stored there. • There are two mechanism to call a function 1) Pass by Value 2) Pass By Reference
  • 16.
    Pass by Value #include<stdio.h> void main ( ) { int a = 5, b = 6; Results: printf("a=%d b=%dn",a,b) ; a=5 b=6 swap (a, b) ; a=6 b=5 printf("a=%d b=%dn",a,b) ; a=5 b=6 } void swap(int a, int b) { int temp; temp= a; a= b; b = temp ; printf ("a=%d b=%dn", a, b); }
  • 17.
    Pass by Reference #include<stdio.h> void main ( ) { int a = 5, b = 6; Results: printf("a=%d b=%dn",a,b) ; a=5 b=6 swap (&a, &b) ; a=6 b=5 printf("a=%d b=%dn",a,b) ; a=6 b=5 } void swap(int *a, int *b) { int temp; temp=*a; *a=*b; *b = temp ; printf ("a=%d b=%dn", *a, *b); }