21
Unit-5.1 Pointer, Structure, Union & Intro to File Handling Course: BTECH Subject: Programming In C Language

Btech 1 pic u-5 pointer, structure ,union and intro to file handling

Embed Size (px)

Citation preview

Page 1: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

Unit-5.1Pointer, Structure, Union

&Intro to File Handling

Course: BTECH

Subject: Programming In C Language

Page 2: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

What is a pointer

• In a generic sense, a “pointer” is anything that tells us In a generic sense, a “pointer” is anything that tells us where something can be found.where something can be found.– Addresses in the phone book

– URLs for webpages

– Road signs

Page 3: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

Java Reference

• In Java, the name of an object is a reference to that object. In Java, the name of an object is a reference to that object. Here Here ford is a reference to a Truck object. It contains the is a reference to a Truck object. It contains the memory address at which the Truck object is stored. memory address at which the Truck object is stored. Truck ford = new Truck( );

• The syntax for using the reference is pretty simple. Just The syntax for using the reference is pretty simple. Just use the “dot” notation.use the “dot” notation.ford.start( );

ford.drive( 23 );

ford.turn (LEFT);

Page 4: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

What is a pointer ?• In C, a pointer variable (or just “pointer”) is similar to In C, a pointer variable (or just “pointer”) is similar to

a reference in Java except thata reference in Java except that– A pointer can contain the memory address of any variable

type (Java references only refer to objects)– A primitive (int, char, float)– An array– A struct or union

– Dynamically allocated memory– Another pointer– A function

– There’s a lot of syntax required to create and use pointers

Page 5: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

Why Pointers?

• They allow you to refer to large data structures in a compact They allow you to refer to large data structures in a compact wayway

• They facilitate sharing between different parts of programsThey facilitate sharing between different parts of programs

• They make it possible to get new memory dynamically as your They make it possible to get new memory dynamically as your program is runningprogram is running

• They make it easy to represent relationships among data items. They make it easy to represent relationships among data items.

Page 6: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

Pointer Caution

• They are a powerful low-level device.They are a powerful low-level device.• Undisciplined use can be confusing and thus the Undisciplined use can be confusing and thus the

source of subtle, hard-to-find bugs. source of subtle, hard-to-find bugs. – Program crashes– Memory leaks– Unpredictable results

Page 7: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

C Pointer Variables

To declare a pointer variable, we must do two thingsTo declare a pointer variable, we must do two things– Use the “*” (star) character to indicate that the variable being

defined is a pointer type.

– Indicate the type of variable to which the pointer will point (the pointee). This is necessary because C provides operations on pointers (e.g., *, ++, etc) whose meaning depends on the type of the pointee.

• General declaration of a pointerGeneral declaration of a pointertype *nameOfPointer;

Page 8: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

Pointer DeclarationThe declarationThe declaration

int *intPtr; defines the variable defines the variable intPtr to be a pointer to a variable of type to be a pointer to a variable of type int. . intPtr will contain the memory address of some will contain the memory address of some int variable or variable or int array. Read this declaration as array. Read this declaration as– “intPtr is a pointer to an int”, or equivalently

– “*intPtr is an int”

Caution -- Be careful when defining multiple variables on the same Caution -- Be careful when defining multiple variables on the same line. In this definitionline. In this definition

int *intPtr, intPtr2;

intPtr is a pointer to an int, but intPtr2 is not!

Page 9: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

Pointer Operators

The two primary operators used with pointers are The two primary operators used with pointers are

* (star) and (star) and && (ampersand) (ampersand)

– The * operator is used to define pointer variables and to deference a pointer. “Dereferencing” a pointer means to use the value of the pointee.

– The & operator gives the address of a variable.Recall the use of & in scanf( )

Page 10: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

Pointer Examplesint x = 1, y = 2, z[10];

int *ip; /* ip is a pointer to an int */

ip = &x; /* ip points to (contains the memory address of) x */

y = *ip; /* y is now 1, indirectly copied from x using ip */

*ip = 0; /* x is now 0 */

ip = &z[5]; /* ip now points to z[5] */

If ip points to x, then *ip can be used anywhere x can be used so in this example *ip = *ip + 10; and x = x + 10; are equivalent

The * and & operators bind more tightly than arithmetic operators so

y = *ip + 1; takes the value of the variable to which ip points, adds 1 and assigns it to y

Similarly, the statements *ip += 1; and ++*ip; and (*ip)++; all increment the variable to which ip points. (Note that the parenthesis are necessary in the last statement; without them, the expression would increment ip rather than what it points to since operators like * and ++ associate from right to left.)

Page 11: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

Pointer and Variable types• The type of a pointer and its pointee must matchThe type of a pointer and its pointee must match

int a = 42;

int *ip;

double d = 6.34;

double *dp;

ip = &a; /* ok -- types match */

dp = &d; /* ok */

ip = &d; /* compiler error -- type mismatch */

dp = &a; /* compiler error */

Page 12: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

More Pointer Code• Use ampersand (Use ampersand ( & ) to obtain the address of the pointee ) to obtain the address of the pointee• Use star ( Use star ( * ) to get / change the value of the pointee ) to get / change the value of the pointee• Use Use %p to print the value of a pointer with to print the value of a pointer with printf( )• What is the output from this code?What is the output from this code?

int a = 1, *ptr1;

/* show value and address of a ** and value of the pointer */ptr1 = &a ;printf("a = %d, &a = %p, ptr1 = %p, *ptr1 = %d\n",

a, &a, ptr1, *ptr1) ;

/* change the value of a by dereferencing ptr1** then print again */*ptr1 = 35 ;printf(“a = %d, &a = %p, ptr1 = %p, *ptr1 = %d\n", a, &a, ptr1, *ptr1) ;

Page 13: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

NULL• NULL is a special value which may be assigned to a pointerNULL is a special value which may be assigned to a pointer• NULL indicates that this pointer does not point to any variable NULL indicates that this pointer does not point to any variable

(there is no pointee)(there is no pointee)• Often used when pointers are declaredOften used when pointers are declared

int *pInt = NULL;• Often used as the return type of functions that return a pointer to Often used as the return type of functions that return a pointer to

indicate function failureindicate function failureint *myPtr;myPtr = myFunction( );if (myPtr == NULL){

/* something bad happened */}

• Dereferencing a pointer whose value is NULL will result in Dereferencing a pointer whose value is NULL will result in program terminationprogram termination..

Page 14: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

Pointers and Function Arguments• Since C passes all primitive function arguments “by value” there Since C passes all primitive function arguments “by value” there

is no direct way for a function to alter a variable in the calling is no direct way for a function to alter a variable in the calling code.code.

• This version of the This version of the swap function doesn’t work. function doesn’t work. WHY NOT?WHY NOT?/* calling swap from somewhere in main() */int x = 42, y = 17;Swap( x, y );

/* wrong version of swap */void Swap (int a, int b){

int temp;temp = a;a = b;b = temp;

}

Page 15: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

A better swap( )• The desired effect can be obtained by passing pointers to the The desired effect can be obtained by passing pointers to the

values to be exchanged.values to be exchanged.• This is a very common use of pointers.This is a very common use of pointers.

/* calling swap from somewhere in main( ) */int x = 42, y = 17;Swap( &x, &y );

/* correct version of swap */void Swap (int *px, int *py){

int temp;temp = *px;*px = *py;*py = temp;

}

Page 16: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

More Pointer Function Parameters

• Passing the address of variable(s) to a function can Passing the address of variable(s) to a function can be used to have a function “return” multiple values.be used to have a function “return” multiple values.

• The pointer arguments point to variables in the calling The pointer arguments point to variables in the calling code which are changed (“returned”) by the function.code which are changed (“returned”) by the function.

Page 17: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

ConvertTime.cvoid ConvertTime (int time, int *pHours, int *pMins) {

*pHours = time / 60;*pMins = time % 60;

}

int main( ){

int time, hours, minutes;printf("Enter a time duration in minutes: ");scanf ("%d", &time);ConvertTime (time, &hours, &minutes);printf("HH:MM format: %d:%02d\n", hours, minutes);return 0;

}

Page 18: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

An Exercise• What is the output from this code?What is the output from this code?void F (int a, int *b) {

a = 7 ; *b = a ; b = &a ;

*b = 4 ; printf("%d, %d\n", a, *b) ;

}

int main(){

int m = 3, n = 5;F(m, &n) ;printf("%d, %d\n", m, n) ;return 0;

}

4, 4

3, 7

Page 19: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

Pointers to struct/* define a struct for related student data */typedef struct student {

char name[50]; char major [20];double gpa;

} STUDENT;

STUDENT bob = {"Bob Smith", "Math", 3.77};STUDENT sally = {"Sally", "CSEE", 4.0};STUDENT *pStudent; /* pStudent is a "pointer to struct student" */

/* make pStudent point to bob */pStudent = &bob;

/* use -> to access the members */ printf ("Bob's name: %s\n", pStudent->name);printf ("Bob's gpa : %f\n", pStudent->gpa);

/* make pStudent point to sally */pStudent = &sally;printf ("Sally's name: %s\n", pStudent->name);printf ("Sally's gpa: %f\n", pStudent->gpa);

Note too that the following are equivalent. Why?? pStudent->gpa and (*pStudent).gpa /* the parentheses are necessary */

Page 20: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

Pointer to struct for functions

void PrintStudent(STUDENT *studentp)

{

printf(“Name : %s\n”, studentp->name);

printf(“Major: %s\n”, studentp->major);

printf(“GPA : %4.2f”, studentp->gpa);

}

Passing a pointer to a struct to a function is more efficient than passing the struct itself. Why is this true?

Page 21: Btech 1 pic u-5 pointer, structure ,union and intro to file handling

References

1. www.tutorialspoint.com/cprogramming/c_pointers.htm

2. www.cprogramming.com/tutorial/c/lesson6.html

3. pw1.netcom.com/~tjensen/ptr/pointers.html

4. Programming in C by yashwant kanitkar

5.ANSI C by E.balagurusamy- TMG publication

6.Computer programming and Utilization by sanjay shah Mahajan Publication

7.www.cprogramming.com/books.html

8.en.wikipedia.org/wiki/C_(programming_language)