170 likes | 289 Views
This chapter delves into the attributes associated with variables in programming languages like Fortran, C, and Java. It covers essential concepts such as implicit declarations, naming conventions, aliasing—where variables can share storage space, and the differences between static and dynamic variable allocation. A detailed exploration of recursion and memory management is provided, highlighting the significance of scope versus lifetime of variables in different contexts. The chapter aims to clarify how variables are managed in diverse programming environments.
E N D
Chapter 5-b • Attributes of variables
Attributes of variables { int sum = 5; ... ... } Symbol Table Identifier Type sum int 0000 0000 0000 0101 0110 0010 Address Value Storage
Variable Names sum=0.0 DO I = 1 TO 10 sum = sum + i END DO ... t = SQR(SUM) ... FUNCTION sqr(val) val = val*val RETURN VAL • Names: Fortran is not case sensitive. • Type: Fortran allows implicit declarations.
Naming Conventions Method names start with lower case public void actionPerformed (ActionEvent e){ int value = Math.PI; . . . } Class names start with upper case Constants are all upper case Local variables are all lower case
Aliasing: Variables c union { short i; float f; char c; } uval; i f uval Aliasing using variables is meant for conserving storage space.
Aliasing: Pointers int i; int *p=&i; char *c; c=(char*)p; i p c Aliasing using pointer variables is not meant for conserving storage space.
Static Variables (Fortran) Call statement Output CALL FUN() 1 CALL FUN() 2 CALL FUN() 3 CALL FUN() 4 . . . . . . SUBROUTINE fun() DATA k/0/ K=K+1 PRINT *, K RETURN In Fortran, all variables are by default static
Static Variables (C) Call statement Output fun( ); 1 fun( ); 1 fun( ); 1 fun( ); 1 . . . fun( ); 1 fun( ); 2 fun( ); 3 fun( ); 4 . . . void fun(){ int k=0; k++; printf(“\n %d”,k); } void fun(){ static int k=0; k++; printf(“\n %d”,k); }
i j i i Stack Dynamic Variables { int i; . . . { int j; . . . . . . } . . . . . . }
3 6 int fact (int n){ if(n==1) return 1; else return n*fact(n-1); } n=3 2 n=2 int fact (int n){ if(n==1) return 1; else return n*fact(n-1); } 2 n=3 n=3 n=1 1 n=2 n=3 1 int fact (int n){ if(n==1) return 1; else return n*fact(n-1); } n=2 n=3 Recursion
Heap-Dynamic Variables (1) p 0 int size=100; int *p; p = (int *) malloc(size*2); ... ... free(p); 99 ???? p Heap allocation requires effective memory management
Heap-Dynamic Variables (2) int *node; node = new int; //Allocates an int cell. ... ... delete node; //free the allocated memory. C++ Java Stack s = new Stack();
Scope (C) Global variable int x; ... main(){ int k; ... ... { int k; ... ... } ... } Local variable Local variable
Scope (Java) public float fun(){ int[] x = {10, 20, 30}; float sum=0; for (int i=0; i<3; i++){ sum=sum+x[i]; } System.out.println(“Sum=”+sum); float v; v=sum/2; return v; } Local variables
Scope (Java classes) public class Myclass{ public void add(int y){ x = x+y; } int x=10; } Java allows the above type of declaration of instance variables but it is not advised.
Scope Vs. Lifetime (1) void compute() { static int k; ... ... ... ... } Scope of the variable is limited to the function block, while its lifetime is the same as the total program execution time.
Scope Vs. Lifetime (2) void compute() { int value; ... ... printinfo(); ... ... } void printinfo(){ ... ... } Scope of “value” does not extend to the function “printinfo”, but lifetime of value does.