C Programming - Functions - Discussion
#include<stdio.h>
void fun(int*, int*);
int main()
{
int i=5, j=2;
fun(&i, &j);
printf("%d, %d", i, j);
return 0;
}
void fun(int *i, int *j)
{
*i = *i**i;
*j = *j**j;
}
Step 1: int i=5, j=2; Here variable i and j are declared as an integer type and initialized to 5 and 2 respectively.
Step 2: fun(&i, &j); Here the function fun() is called with two parameters &i and &j (The & denotes call by reference. So the address of the variable i and j are passed. )
Step 3: void fun(int *i, int *j) This function is called by reference, so we have to use * before the parameters.
Step 4: *i = *i**i; Here *i denotes the value of the variable i. We are multiplying 5*5 and storing the result 25 in same variable i.
Step 5: *j = *j**j; Here *j denotes the value of the variable j. We are multiplying 2*2 and storing the result 4 in same variable j.
Step 6: Then the function void fun(int *i, int *j) return back the control back to main() function.
Step 7: printf("%d, %d", i, j); It prints the value of variable i and j.
Hence the output is 25, 4.
{
if(i==10) return;
i++ ;
printf("%d" , i);
temp(i);
}
Change Your function body with this. Then Your Problem will be solved. :)
#include <stdio.h>
void temp(int i)
{
if(i==10) return;
i++ ;
temp(i);
printf("%d" , i);
}
int main()
{
temp(1);
}
This program(when executed in GCC compiler) gives the output
1098765432
How is it printing the elements in reverse order?
here the pointer value is the value that is present in the address of the variable .
so
*i=5,hence *i**i=5*5=25
*j=2,hence *j**j=2*2=4