Vous êtes sur la page 1sur 33

Pointers in C

Pointers
What is Pointers?
Pointer is a user defined data type which creates special types of
variables which can hold the address of primitive data
Why should I use Pointers? Why should I use Pointers?
- Increase the execution speed
- Enable us to access a variable that is defined outside the
function
- More efficient in handling the data tables
- Reduce the length and complexity of a program
Pointers
What are the operators used?
*, &
What are the advantages of using pointers?
Dynamic memory allocation is possible with pointers. Dynamic memory allocation is possible with pointers.
Passing arrays and structures to functions
Passing addresses to functions.
Creating data structures such as trees, linked lists etc.
Pointers Assignment
int a=50;
int *ptr1;
int **ptr2;
ptr1=&a;
ptr2=&pt1;
void main(){
int x=25;
int *ptr=&x; //statement one
int **temp=&ptr; //statement two
printf(%d %d %d,x,*ptr,**temp);
}
Pointers Assignment
#include <stdio.h>
int main ()
{
char ch = a;
char* p1, *p2; char* p1, *p2;
p1 = &ch;
p2 = p1; // Pointer Assignement Taking Place
printf (" *p1 = %c And *p2 = %c", *p1,*p2);
return 0;
}
Ans: *p1=a And *p2=a
Pointers Conversion
#include <stdio.h>
int main ()
{
int i = 67;
char* p1
int *p2; int *p2;
p2 = &i;
p1 = (char *) p2; // Type Casting and Pointer Conversion
printf (" *p1 = %c And *p2 = %d", *p1,*p2);
return 0;
}
Ans: *p1 = C And *p2 = 67
Pointers
Opertor Precendence and Associativity
Reading Pointers
ptr is pointer to such one dimensional array of
size three which content char type data
Reading Pointers
1. float (* ptr) (int)
2. void (*ptr) (int (*)[2],int (*) void))
3. int ( * ( * ptr ) [ 5 ] ) ( )
Arithmetic operation with pointer
Address + Number= Address
Address - Number= Address
Address++ = Address
Address-- = Address Address-- = Address
++Address = Address
--Address = Address
Address Address=Number void main(){
int *ptr=( int *)1000;
ptr=ptr+1;
printf(" %u",ptr);
}
Output: 1002
Pointers to function
int * function();
void main(){
auto int *x;
int *(*ptr)();
ptr=&function;
int *function(){
static int a=10;
return &a;
}
ptr=&function;
x=(*ptr)();
printf ("%d",*x);
}
Output: 10
Explanation:
Here function is function whose parameter is void data type
and return type is pointer to int data type.
x=(*ptr)() x=(*ptr)()
=> x=(*&function)() //ptr=&function
=> x=function() //From rule *&p=p
=> x=&a
So, *x = *&a = a =10
Pointers Supports
Pointer to array of function
Pointer to array of string
Pointer to structure
pointer to union
Multi level pointer
Pointer to array of pointer to string Pointer to array of pointer to string
Pointer to three dimentional array
Pointer to two dimensional array
Sorting of array using pointer
Pointer to array of array
Pointer to array of union
Pointer to array of structure
Pointer to array of character
Pointer to array of integer
Complex pointer
Functions Returning Pointers
char display (char (*)[])
void main(){
char c;
char character[]={65,66,67,68};
char (*ptr)[]=&character;
c=display (ptr); c=display (ptr);
printf ("%c", c);
}
char display (char (*s)[])
{
**s+=2;
return **s;
}
Output: C
Explanation: Here function display is passing pointer to array of
characters and returning char data type.
**s+=2
=>**s=**s+2 =>**s=**s+2
=>**ptr=**ptr+2 //s=ptr
=>**&character= **&character+2 //ptr=&character
=>*character=*character+2 //from rule *&p =p
=>character[0]=character[0]+2 //from rule *(p+i)=p[i]
=>character [0] =67
**s=character [0] =67
#include<stdio.h>
void main()
{
int a = 320;
char *ptr;
Question 1.
char *ptr;
ptr =( char *)&a;
printf("%d ",*ptr);
getch();
}
(A) 2 (B) 320 (C) 64 (D) Compilation error
(E) None of above
Question 1. Explanation
As we know int is two byte data byte while char is one byte data
byte. char pointer can keep the address one byte at time.
Binary value of 320 is 00000001 01000000 (In 16 bit)
Memory representation of int a = 320 is: Memory representation of int a = 320 is:
So ptr is pointing only first 8 bit which color is green and Decimal
value is 64.
Question 2.
(A) NULL
#include<stdio.h>
#include<conio.h>
void main(){
void (*p)();
int (*q)();
int (*r)();
(A) NULL
(B) Department of Computer Applications
(C) Error (D) Compilation error
(E) None of above
int (*r)();
p = clrscr;
q = getch;
r = puts;
(*p)();
(*r)( Department of Computer Applications");
(*q)(Error);
}
Question 2. Explanation
p is pointer to function whose parameter is void and return
type is also void.
r and q is pointer to function whose parameter is void and r and q is pointer to function whose parameter is void and
return type is int .
So they can hold the address of such function.
#include<stdio.h>
void main(){
int i = 3;
int *j;
int **k;
Question 3.?
int **k;
j=&i;
k=&j;
printf(%u %u %d ,k,*k,**k);
}
(A) Address, Address, 3 (B) Address, 3, 3 (C) 3, 3,3
(D) Compilation error (E) None of above
Question 3. Explanation
Memory representation
Here 6024, 8085, 9091 is any arbitrary address, it may be different.
Value of k is content of k in memory which is 8085
Value of *k means content of memory location which address k
keeps.
k keeps address 8085 . k keeps address 8085 .
Content of at memory location 8085 is 6024
In the same way **k will equal to 3.
Short cut way to calculate:
Rule: * and & always cancel to each other
i.e. *&a = a
So *k = *(&j) since k = &j
*&j = j = 6024
And
**k = **(&j) = *(*&j) = *j = *(&i) = *&i = i = 3
Question 4?
#include<stdio.h>
#include<string.h>
void main(){
char *ptr1 = NULL;
char *ptr2 = 0;
strcpy(ptr1," c"); strcpy(ptr1," c");
strcpy(ptr2,"questions");
printf("\n%s %s",ptr1,ptr2);
getch();
}
(A) c questions (B) c (null)
(C) (null) (null)
(D) Compilation error(E) None of above
Question 5?
#include<stdio.h>
#include<string.h>
void main(){
register a = 25; register a = 25;
int far *p;
p=&a;
printf("%d ",*p);
getch();
}
(A) 25 (B) 4 (C) Address
(D) Compilation error
(E) None of above
Question 5
Explanation:
Register data type stores in CPU. So it has not any
memory address. Hence we cannot write &a.
Question 6?
#include<stdio.h>
#include<string.h>
void main(){
int a = 5,b = 10,c;
int *p = &a,*q = &b;
Difference of two same type of
pointer is always one
int *p = &a,*q = &b;
c = p - q;
printf("%d" , c);
getch();
}
(A) 1 (B) 5 (C) -5
(D) Compilation error
(E) None of above
Question 7?
#include<stdio.h>
int main()
{
int i=3, *j, k; int i=3, *j, k;
j = &i;
printf("%d\n", i**j*i+*j);
return 0;
}
A. 30 B. 27
C. 9 D. 3
Questions 8.?
#include<stdio.h>
int main()
{
int ***r, **q, *p, i=8;
p = &i; q = &p; r = &q; p = &i; q = &p; r = &q;
printf("%d, %d, %d\n", *p, **q, ***r);
return 0;
}
A. 8,8,8 B. 4000, 4002, 4004
C. 4000, 4004, 4008 D. 4000, 4008, 4016
Questions 9.?
#include<stdio.h>
int main()
{
void *vp;
char ch=74, *cp="JACK";
A. JCK B. J65K C. JAK D. JACK
char ch=74, *cp="JACK";
int j=65;
vp=&ch;
printf("%c", *(char*)vp);
vp=&j;
printf("%c", *(int*)vp);
vp=cp;
printf("%s", (char*)vp+2);
return 0;
}
Questions 10.?
#include<stdio.h>
int main()
{
int arr[2][2][2] = {10, 2, 3, 4, 5, 6, 7, 8};
int *p, *q; int *p, *q;
p = &arr[1][1][1];
q = (int*) arr;
printf("%d, %d\n", *p, *q);
return 0;
}
A. 8 10 B. 10 2 C. 8 1 D. Garbage value
Question 11.?
#include<stdio.h>
int main()
{
char str[] = "peace";
char *s = str; char *s = str;
printf("%s\n", s++ +3);
return 0;
}
A. Peace B. eace C. ace D. ce
Question 12.?
#include<stdio.h>
int main()
{
char str1[] = "India";
char str2[] = "BIX"; char str2[] = "BIX";
char *s1 = str1, *s2=str2;
while(*s1++ = *s2++)
printf ("%s", str1);
printf("\n");
return 0;
}
A. IndiaBIX B. BndiaBIdiaBIXia
C. India D. (null)
*ptr++ Vs ++*ptr
#include <stdio.h>
#include <conio.h>
void main()
{
int *a;
int b=10; clrscr(); int b=10; clrscr();
a=&b;
printf("%u\n",a);
*a++;
printf("%u\n",a);
++*a;
printf("%d",*a);
printf("%d",b);
getch();
}
65524 65526 1 10
Thank You