What will be output of the following program?
#include<stdio.h>
int main() {
int a = 2, b = 7, c = 10;
c = a == b;
printf("%d",c);
return 0;
}
Output: 0
== is a relational operator which returns only two values.
0: If a == b is false
1: If a == b is true
1: If a == b is true
Since a = 2 and b = 7, so a == b is false, thus c = 0
What will be output of following program?
#include<stdio.h>
#include<string.h>
int main() {
char *ptr1 = NULL;
char *ptr2 = 0;
strcpy(ptr1," c");
strcpy(ptr2,"questions");
printf("\n%s %s",ptr1,ptr2);
return 0;
}
What will be output of following program?
#include<stdio.h>
int main() {
int * p , b;
b = sizeof(p);
printf("%d" , b);
return 0;
}
Output: 4
What will be output of following program?
#include<stdio.h>
int main() {
int i = 5;
int *p;
p = &i;
printf(" %u %u", *&p , &*p);
return 0;
}
Output: address address
* and & always cancel to each other,
i.e. *&a = a, so *&p = p which store address of integer i.
Again, &*p = &*(&i) //since p = &i
= &(*&i)
* and & always cancel to each other,
i.e. *&a = a, so *&p = p which store address of integer i.
Again, &*p = &*(&i) //since p = &i
= &(*&i)
= &i
Hence second output is also address of i.
What will be output of following program?
#include<stdio.h>
int main() {
int i = 3;
int *j;
int **k;
j=&i;
k=&j;
printf("%u %u %d ",k,*k,**k);
return 0;
}
Output: address address 3
Here 6024, 8085, 9091 are arbitrary addresses. The value of k is the content of k in memory which is 8085.
Here 6024, 8085, 9091 are arbitrary addresses. The value of k is the content of k in memory which is 8085.
The value of *k means the content of memory location which address k keeps. k keeps address 8085. The content of at memory location 8085 is 6024. In the same way **k will equal to 3.
Easy way to calculate: Rule: * and & always cancel to each other i.e. *&a = a, so
*k = *(&j) // since k = &j
*&j = j = 6024
**k = **(&j) = *(*&j) = *j = *(&i) = *&i = i = 3
What will be output of following program?
#include<stdio.h>
int main() {
int i = 3;
int *j;
int **k;
j = &i;
k = &j;
printf("%u %u %u",i,j,k);
return 0;
}
Output: 3 address address
What will be output of following program?
#include<stdio.h>
int main() {
int i = 5 , j;
int *p , *q;
p = &i;
q = &j;
j = 5;
printf("%d %d",*p,*q);
return 0;
}
Output: 5 5
What will be output of following program?
#include<stdio.h>
#include<string.h>
int main() {
int a = 5, b = 10, c;
int *p = &a, *q = &b;
c = p - q;
printf("%d", c);
return 0;
}
Output: 1
The difference of two same type of pointer is always one.
What will be output of following program?
#include<stdio.h>
int main() {
int a = 320;
char *ptr; // use int *ptr; output is 320
ptr =( char *)&a;
printf("%d ",*ptr);
return 0;
}
Output: 64
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 a time.
Binary value of 320 is 00000001 01000000 (In 16 bit)
Memory representation of int a = 320 is:
So ptr is pointing only first 8 bit and its decimal value is 64.
What will be output of following program?
#include<stdio.h>
int main() {
int a = 10;
void *p = &a;
int *ptr = p;
printf("%u",*ptr);
return 0;
}
Output: 10
void pointer can hold the address of any data type without type casting. Any pointer can hold void pointer without type casting.