C Programming - Pointers - Discussion
Discussion Forum : Pointers - Point Out Correct Statements (Q.No. 8)
8.
In the following program add a statement in the function fact() such that the factorial gets stored in j.
#include<stdio.h>
void fact(int*);
int main()
{
int i=5;
fact(&i);
printf("%d\n", i);
return 0;
}
void fact(int *j)
{
static int s=1;
if(*j!=0)
{
s = s**j;
*j = *j-1;
fact(j);
/* Add a statement here */
}
}
Discussion:
28 comments Page 1 of 3.
SAHA said:
4 years ago
Wow. Nice explanation @Jas.
Mayur baviskar said:
4 years ago
Thanks @Kareena.
Kareena said:
5 years ago
Let's do with value of i=3.
1) *j=3 , s=1
s=s* *j; ----> s=1*3 ------> s=3
*j=*j - 1; ------> *j=2
2) *j=2 , s=3 (because s is static)
s=s* *j; ----> s=3*2 ------> s=6
*j=*j - 1; ------> *j=1
3) *j=1 , s=6 (because s is static)
s=s* *j; ----> s=6*1 ------> s=6
*j=*j - 1; ------> *j=0.
4) *j=0 , s=6 (because s is static)
while(*j!=0) ----> false.
It will have no effect.
5) Control back to step (3)
Value of s will remain same because it is static ---> s=6
*j =s; -----> *j=6
6) Control back to step (2)
Value of s will remain same because it is static ---> s=6
*j =s; -----> *j=6
7) Control back to step (1)
Value of s will remain same because it is static ---> s=6
*j =s; -----> *j=6
8) Control back to main
As it is call be refrence, i=*j ------> i=6.
1) *j=3 , s=1
s=s* *j; ----> s=1*3 ------> s=3
*j=*j - 1; ------> *j=2
2) *j=2 , s=3 (because s is static)
s=s* *j; ----> s=3*2 ------> s=6
*j=*j - 1; ------> *j=1
3) *j=1 , s=6 (because s is static)
s=s* *j; ----> s=6*1 ------> s=6
*j=*j - 1; ------> *j=0.
4) *j=0 , s=6 (because s is static)
while(*j!=0) ----> false.
It will have no effect.
5) Control back to step (3)
Value of s will remain same because it is static ---> s=6
*j =s; -----> *j=6
6) Control back to step (2)
Value of s will remain same because it is static ---> s=6
*j =s; -----> *j=6
7) Control back to step (1)
Value of s will remain same because it is static ---> s=6
*j =s; -----> *j=6
8) Control back to main
As it is call be refrence, i=*j ------> i=6.
(5)
Devansh said:
6 years ago
How come 120? Please anyone explain.
Akash said:
7 years ago
The answer should be j=s.
Neha said:
7 years ago
But j is having the address of i.. so *j means value at address of i and i will store the value. i think it should be j=s.
Abhishek said:
7 years ago
Explain it clearly for me.
Deepika said:
8 years ago
Please, anyone explain clearly.
Sujith said:
8 years ago
In unwinding phase, the last value of s becomes 5 then how it sends 120?
Please someone explain clearly.
Please someone explain clearly.
RATHOD said:
8 years ago
Please anyone explain it properly.
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers