EST102 - M5 - Ktunotes - in
EST102 - M5 - Ktunotes - in
EST102 - M5 - Ktunotes - in
Module V
Pointers and Files-Basics of Pointer: declaring pointers, accessing data though pointers, NULL
pointer,array access using pointers, pass by reference effect. File Operations: open, close, read,
write, append Sequential access and random access to files: In built file handling functions
(rewind() ,fseek(), ftell(),feof(), fread(), fwrite()), simple programs covering pointers and files.
POINTERS
The pointer in C language is a variable which stores the address of another variable.
This variable can be of type int, char, array, function, or any other pointer. The size of the
pointer depends on the architecture. However, in 32-bit architecture the size of a pointer is
2 byte.
Consider the following example to define a pointer which stores the address of an
integer variable.
int n = 10;
int *p = &n; // Variable p of type pointer is pointing to the address of the variable n of type
integer.
Declaration of Pointer Variable
The pointer in C language can be declared using * (asterisk symbol). It is also known
as indirection operator used to dereference a pointer.
datatype *ptrvar;
where ptrvar is any identifier
int *a; //pointer to integer
char *c; //pointer to char
IIPE 1
#include<stdio.h>
void main()
{
int n = 10;
int *p;
p = &n;
printf("Address of n=%u\n",&n);
printf("Value of n=%d\n",n);
printf("Address of p=%u\n",&p);
printf("Value of p=%u\n",p);
printf("Value of *p=%d\n",*p); // *p = value of n;
}
OUTPUT
Address of n=6487628
Value of n=10
Address of p=6487616
Value of p=6487628
Value of *p=10
Each variable has two properties: address and value. Address of a variable is the
memory location allocated for that variable. Value of a variable is the value stored in the
memory location allocated to them. The address of a variable can be derived using address
of (&) operator. In the example above, the address of n is 6487628 and value is 10.
IIPE 2
NULL Pointer
A pointer that is not assigned any value but NULL is known as the NULL pointer. If
you don't have any address to be specified in the pointer at the time of declaration, you can
assign NULL value. It will provide a better approach.
int *p=NULL;
OPERATIONS ON POINTERS
Address of a variable can be assigned to a pointer variable.
One pointer variable can be assigned to another pointer variable provided both
points to the items of same datatype.
A NULL value can be assigned to a pointer variable.
An integer quantity can be added to or subtracted from a pointer variable. The
result will be a pointer.
When we increment a pointer, its value is increased by the length of its data type.
One pointer variable can be subtracted from another pointer variable provided both
points to the elements of the same array. The result will be an integer value.
Two pointer variables can be compared provided both points to the items of same
datatype.
A pointer variable can be compared with NULL values.
Write a program to find the sum of two numbers using pointers
#include<stdio.h>
void main()
{
int x,y,sum,*xp,*yp;
printf("Enter value of x:");
scanf("%d",&x);
printf("Enter value of y:");
scanf("%d",&y);
xp=&x;
yp=&y;
sum=*xp+*yp;
printf(" Sum is %d \n",sum);
}
OUTPUT
Enter value of x:10
IIPE 3
IIPE 4
IIPE 5
for(i=0;i<n;i++)
{
printf("%d\t",*(p+i));
}
}
OUTPUT
Enter the size of array:5
16 7 14 2 5
Array Content
2 5 7 14 16
POINTER TO POINTER
A pointer points to an address of another pointer. Such pointers are known
as pointer to pointer or double pointers.
Example
#include<stdio.h>
void main()
{
int a=10;
int *p,**q;
p=&a;
q=&p;
printf("\nValue of a is %d \n",a);
printf("\nValue of *p is %d \n",*p);
printf("\nValue of **q is %d \n ",**q);
}
OUTPUT
Value of a is 10
Value of *p is 10
Value of **q is 10
PASS BY REFERENCE
In C programming, it is also possible to pass addresses as arguments to functions. To
accept these addresses in the function definition, we can use pointers. In this method, the
address of the actual parameters is passed to formal parameters. So any change in formal
parameters will be reflected in the actual parameters.
Consider the program to swap two numbers using pass by reference method,
IIPE 6
#include<stdio.h>
int swap(int *a,int *b)
{
int temp=*a;
*a= *b;
*b=temp;
}
void main()
{
int x,y;
printf("\nEnter the numbers:");
scanf("%d%d",&x,&y);
printf("\nBefore swapping : x=%d\ty=%d\n",x,y);
swap(&x,&y);
printf("\nAfter swapping : x=%d\ty=%d",x,y);
}
OUTPUT
Enter the numbers:10 20
Before swapping: x=10 y=20
After swapping: x=20 y=10
IIPE 7
FILES
A file is a collection of related data that a computer treats as a single unit. Computers
store files to secondary storage so that the contents of files remain intact when a computer
shuts down. When a computer reads a file, it copies the file from the storage device to
memory; when it writes to a file, it transfers data from memory to the storage device. When
a program is terminated, the entire data is lost. Storing in a file will preserve your data even
if the program terminates. It is easy to move the data from one computer to another
without any changes. C uses a structure called FILE (defined in stdio.h) to store the
attributes of a file. When working with files, you need to declare a pointer of type FILE. This
declaration is needed for communication between the file and the program.
Types of Files
Text files
Binary files
1. Text files
Text files are the normal .txt files. You can easily create text files using any simple
text editors such as Notepad. When you open those files, you'll see all the contents within
the file as plain text. It is easy to edit or delete the contents. They take minimum effort to
maintain, are easily readable, and provide the least security and takes bigger storage space.
2. Binary files
Binary files are mostly the .bin files in the computer. Instead of storing data in plain
text, they store it in the binary form (0's and 1's). They can hold a higher amount of data,
are not readable easily, and provides better security than text files.
FILE OPERATIONS
1) Opening a file
IIPE 8
A file must be “opened” before it can be used. Opening a file is performed using the
fopen() function defined in the stdio.h header file.
FILE *fp
fp = fopen("filename","mode");
– fp is declared as a pointer to the data type FILE.(C has a special "data type" for handling
files which is defined in the standard library 'stdio.h '.)
It is called the file pointer and has the syntax FILE*.
– filename is a string - specifies the name of the file.
– fopen returns a pointer to the file which is used in all subsequent file operations.
Opens a text file for writing. If it does not exist, then a new file is
2 w created. Here your program will start writing content from the
beginning of the file.
Opens a text file for both reading and writing. It first truncates the
5 w+ file to zero length if it exists, otherwise creates a file if it does not
exist.
Opens a text file for both reading and writing. It creates the file if
6 a+ it does not exist. The reading will start from the beginning but
writing can only be appended.
IIPE 9
File Location
We can provide the relative address of the file location or absolute address of the
file. Consider your working directory is C:\CP\Test\ . Now you want to open a file hello.c in
read mode. Two ways to provide the file location are as given below:
fp = fopen("hello.c","r");
OR
fp = fopen("C:\\CP\\Test\\hello.c","r")
2. Closing a file
The file (both text and binary) should be closed after reading/writing. Closing a file
is performed using the fclose() function.
fclose(fp);
Here, fp is a file pointer associated with the file to be closed.
– fclose() function closes the file and returns zero on success, or EOF if there is an error
in closing the file.
– This EOF is a constant defined in the header file stdio.h.
IIPE 10
1) The only difference is that fprintf() and fscanf() expects a pointer to the structure
FILE.
2) To write into a binary file, you need to use the fwrite() function. The functions
take four arguments:
Address of data to be written in the disk
Size of data to be written in the disk
Number of such type of data
Pointer to the file where you want to write.
3) Function fread() also take 4 arguments similar to the fwrite() function as above.
fread(addressData, sizeData, numbersData, pointerToFile);
feof()
The C library function int feof(FILE *stream) tests the end-of-file indicator for the
given stream. This function returns a non-zero value when End-of-File indicator associated
with the stream is set, else zero is returned.
1) rewind()
The rewind() function sets the file pointer at the beginning of the stream. It is useful if
you have to use stream many times.
Syntax: rewind(file pointer)
2) fseek()
If you have many records inside a file and need to access a record at a specific position,
you need to loop through all the records before it , to get the record. This will waste a lot of
memory and operation time. An easier way to get to the required data can be achieved
using fseek().
fseek(FILE * stream, long int offset, int pos);
IIPE 11
The first parameter stream is the pointer to the file. The second parameter is the
position of the record to be found, and the third parameter specifies the location where the
offset starts.
Different positions in fseek()
Position Meaning
SEEK_SET Starts the offset from the beginning of the file.
SEEK_END Starts the offset from the end of the file.
SEEK_CUR Starts the offset from the current location of the cursor in the
file.
3) ftell()
ftell() in C is used to find out the position of file pointer in the file with respect to
starting of the file.
Syntax of ftell() is:
ftell(FILE *pointer)
Sequential file access is the method employed in tape drives where the files are
accessed in a sequential manner. So if you have to get a file in the end of the tape you have
to start from the beginning till it reaches the beginning of the file.
Random access files are similar to the one in Hard Disks and Optical drives,
wherever the files is placed it will go to that particular place and retrieve it.
Accessing data sequentially is much faster than accessing it randomly because of the
way in which the disk hardware works.
IIPE 12
Content of test.txt
Hello, Welcome to C Programming Lectures.
OUTPUT
Hello, Welcome to C Programming Lectures.
Content of test.txt
Hello, Welcome to C Programming Lectures.
IIPE 13
OUTPUT
Count of Vowels=12
Content of test.txt
Hello, Welcome to C Programming Lectures.
OUTPUT
Successfully Copied
Content of copy.txt
Hello, Welcome to C Programming Lectures.
IIPE 14
ch=fgetc(f2);
fputc(ch,f3);
}
printf("Successfully Merged");
}
Content of file1.txt
Hello, Welcome to C Programming Lectures.
Content of file2.txt
C is very easy to learn.
OUTPUT
Successfully Merged
Content of merge.txt
Hello, Welcome to C Programming Lectures. C is very easy to learn.
5) Write a program to read numbers from a file and display the largest number.
#include<stdio.h>
void main()
{
FILE *f1;
int large,num;
f1 = fopen("number.txt","r");
fscanf(f1,"%d",&large); // setting first element as largest element
while(feof(f1) == 0)
{
fscanf(f1,"%d",&num);
if(large<num)
{
large= num;
}
}
fclose(f1);
printf("Largest element = %d",large);
}
Content of number.txt
15 21 7 29 36 78 67 56 10
OUTPUT
Largest element = 78
IIPE 15
6) Consider you are a content writer in Wikipedia. You are the person who write the
known facts about APJ Abdul Kalam. After his death, you need to change all is to was.
Write a program to replace all is’ to was’ to a new file.
#include<stdio.h>
#include<string.h>
void main()
{
FILE *f1,*f2;
char str[30];
f1 = fopen("apj.txt","r");
f2 = fopen("new.txt","w");
fscanf(f1,"%s",str);
while(feof(f1) == 0)
{
if(strcmp(str,"is")==0)
fprintf(f2,"was");
else
fprintf(f2,"%s ",str);
fscanf(f1,"%s",str);
}
fclose(f1);
fclose(f2);
printf("Replaced String Successfully\n");
}
IIPE 16
rev[j]='\0';
fprintf(f2,"%s ",rev);
}
fclose(f1);
fclose(f2);
}
Content of test.txt
Welcome to C programming
Content of test.txt
Welcome to C programming.
C is very easy to learn
OUTPUT
Count of words = 4
Count of Lines = 2
IIPE 17
#include<stdio.h>
void main()
{
FILE *f1;
char str[30];
f1 = fopen("test.txt","a");
printf("Enter the string:");
gets(str);
fprintf(f1,"%s",str);
fclose(f1);
}
10) Write a program to display content of a file two times without closing the file.
#include<stdio.h>
void main()
{
FILE *fp;
char ch;
fp = fopen("test.txt","r");
while(feof(fp)==0)
{
ch=fgetc(fp);
printf("%c",ch);
}
rewind(fp);
while(feof(fp)==0)
{
ch=fgetc(fp);
printf("%c",ch);
}
fclose(fp);
}
OUTPUT
Hello, Welcome to C programming. Hello, Welcome to C programming.
11) Write a program to read the details of “n” Employees with following fields –
name, empid and salary and write the details into a file. Then read details from file
and display the name of employee who has highest salary.
#include<stdio.h>
struct Employee
{
char name[30];
int empid;
double salary;
IIPE 18
};
void main()
{
FILE *fp;
struct Employee e[10],res,temp;
int i,n;
fp = fopen("employee.dat","w");
printf("Enter the limit:");
scanf("%d",&n);
printf("Enter the details of Employee\n");
for(i=0;i<n;i++)
{
printf("Name:");
scanf("%s",e[i].name);
printf("EmpId:");
scanf("%d",&e[i].empid);
printf("Salary:");
scanf("%lf",&e[i].salary);
fwrite(&e[i],sizeof(e[i]),1,fp);
}
fclose(fp);
fp = fopen("employee.dat","r");
res.salary=-1.0;
while(feof(fp) == 0)
{
fread(&temp,sizeof(temp),1,fp);
if(res.salary < temp.salary)
{
res = temp;
}
}
printf("Name of Employee with highest Salary:%s",res.name);
}
OUTPUT
Enter the limit:2
Enter the details of Employee
Name:John
Salary:10000
Name:Kiran
EmpId:102
Salary:20000
Name of Employee with highest Salary:Kiran
IIPE 19
IIPE 20
14. How will you declare a pointer to a function? Write down the syntax and explain. [KTU,
DECEMBER 2019]
15. What is the significance of EOF? [KTU, DECEMBER 2019]
16. With a suitable example explain how does a pointer point to another pointer? [KTU,
MAY 2019]
17. Discuss about unformatted data files and write on any two library functions associated
with this. [KTU, MAY 2019]
18. What is the output of the following program? Justify your answer.
#include<stdio.h>
void main()
{
char *p = “wxyz”;
printf(“%c”, *p++);
printf(“%c”, *p);
} [KTU, MAY 2019]
19. List the advantages of using pointers in C. [KTU, MAY 2019]
20. Using pointers, write a function that receives a character string and a character as
argument and deletes all occurrences of this character in the string. The function should
return the corrected string with no holes. Also write the main function to invoke the
above function. [KTU, MAY 2019]
21. Write a C program to write a set of numbers to a file and separate the odd and even
numbers to two separate files. [KTU, MAY 2019]
22. Explain the use of indirection operator with the help of an example? [KTU, MAY 2017],
[KTU, JULY 2017]
23. Explain the difference between *ptr++ and (*ptr)++ if ptr is pointing to the first element
of an integer array. [KTU, MAY 2017]
24. With an example, show how you can access the members of a structure variable using a
pointer to the variable. [KTU, MAY 2017]
25. What is NULL pointer? [KTU, MAY 2017]
26. How do you declare a pointer variable? What is the significance of the data type
included in the declaration? [KTU, JULY 2017]
27. What are array of pointers? How do you declare an array of pointers? [KTU, JULY 2017]
28. For the declaration int p=1, q=1, r[25]={1}, s[5][25]={{1}}; , check the validity of the
given pointer usages and if valid provide the value of the statement. Support your
answer with proper explanation.
i) *p ii) &(p+q) iii) *(&p) iv) *2017 v) *s[0] [KTU, APRIL 2018]
29. Explain any three file opening modes? [KTU, MAY 2017], [KTU, JULY 2018]
IIPE 21
30. How can you perform read and write operations of an unformatted data file? [KTU,
MAY 2017]
31. Assume that there are two files first.txt and second.txt. Write a C program to merge the
contents of two file into a new file third.txt [KTU, MAY 2017]
32. What do you mean by opening of a file? How is this accomplished? [KTU, JULY 2017],
[KTU, DECEMBER 2019]
33. Write a program to count the number of vowels, consonants, digits and special
characters in a text file. [KTU, JULY 2017]
34. Write a C program to copy the content of a given text file to a new file after replacing
every lowercase letters with corresponding uppercase letters. [KTU, APRIL 2018]
35. With suitable example explain any four different File I/O operations in C? [KTU, APRIL
2018]
36. Discuss the concept of binary file in C. [KTU, DECEMBER 2018]
37. What is the purpose of fopen() and fclose() functions in C [KTU, DECEMBER 2018]
38. When a program is terminated, all the files used by it are automatically closed. Why is it
then necessary to close a file during the execution of the program? [KTU, DECEMBER
2018]
39. What is the purpose of getw() and putw() functions [KTU , DECEMBER 2018]
40. Write a C program to create a file and store information about a person, in terms of his
name, age and salary [KTU, DECEMBER 2018]
41. Write any two file handling functions used to write data into text files. [KTU,
DECEMBER 2018]
42. Write a C program to create a text file and display its contents. [KTU, JULY 2018]
43. Briefly explain unformatted file in C. Give the format of fwrite functions in C. [KTU, JULY
2018]
44. Write a C program to read set of numbers from input file ‘value.dat’ and store the sorted
numbers in an output file ‘sort.res’ [KTU, JULY 2018]
45. Explain any Six File opening modes available in C. [KTU, APRIL 2018]
46. List any three advantages of pointers. What is pointer to a one-dimensional array?
[KTU, MAY 2019]
IIPE 22