C Programming - Arrays - Discussion

Discussion Forum : Arrays - Find Output of Program (Q.No. 3)
3.
What will be the output of the program ?
#include<stdio.h>

int main()
{
    void fun(int, int[]);
    int arr[] = {1, 2, 3, 4};
    int i;
    fun(4, arr);
    for(i=0; i<4; i++)
        printf("%d,", arr[i]);
    return 0;
}
void fun(int n, int arr[])
{
    int *p=0;
    int i=0;
    while(i++ < n)
        p = &arr[i];
    *p=0;
}
2, 3, 4, 5
1, 2, 3, 4
0, 1, 2, 3
3, 2, 1 0
Answer: Option
Explanation:

Step 1: void fun(int, int[]); This prototype tells the compiler that the function fun() accepts one integer value and one array as an arguments and does not return anything.

Step 2: int arr[] = {1, 2, 3, 4}; The variable a is declared as an integer array and it is initialized to

a[0] = 1, a[1] = 2, a[2] = 3, a[3] = 4

Step 3: int i; The variable i is declared as an integer type.

Step 4: fun(4, arr); This function does not affect the output of the program. Let's skip this function.

Step 5: for(i=0; i<4; i++) { printf("%d,", arr[i]); } The for loop runs untill the variable i is less than '4' and it prints the each value of array a.

Hence the output of the program is 1,2,3,4

Discussion:
25 comments Page 1 of 3.

Pradeep Kumar said:   1 decade ago
In the function fun condition while loop is i++<n i.e it will compare the value first then increment(post increment), then enter the loop.last iteration it will assign p with address of 5th element of arr[4].so the main function arr values not effected. But it will produce run time error or segmentation fault at *p=0; after while loop.because accessing the memory which is not allocated or allowed.

Rupinderjit said:   1 decade ago
Here is the Simple solution.The "i" in the function definition is local to that block.It's scope is only inside the curly braces of function definition.
And the "i" in main program doesn't knows the "i" in function definition.So function dentition's "i" has no effect on output,which implies fun(4,arr[]) has no effect on the output.
So the output is 1 2 3 4.

Vignesh J said:   3 years ago
fun(4,arr) does not have an effect on the code because at the termination of the while loop.
while(i++ < n)
p = &arr[i];
n will be 4 and p = &arr[4] (which is outside the size of the array)
So, when *p = 0;, value at arr[4] will be 0 which is outside the limit of the array so it function call will not have any effect.
(2)

Anon said:   3 years ago
fun(4,arr) can have an effect on the code.

It doesn't in this case due to the way the while loop is defined, which changes arr[4] (which doesn't concern us).

Replace i++ with ++i to see if the while loop has an effect on the values of the array.

Atuljain said:   1 decade ago
this output like 1, 2, 3, 4 because finally pointer p.

arr[0]=1
arr[1]=2
arr[2]=3
arr[3]=4
arr[4]='\0'

Finally p point to null's address and above we print only 4 times if you i<=4 then you get arr[4]=0;

Nivin said:   1 decade ago
No it's because post increment, increments only after end of statement. So here (i++<n) p gets address of arr[4]. And we don't get any error because we are not accessing it and only assignment is done.

Payal said:   1 decade ago
Pradeep kumar what do you mean by "But it will produce run time error or segmentation fault at *p=0; after while loop. Because accessing the memory which is not allocated or allowed. ".

Sri said:   1 decade ago
When I compile this program in c compiler it is showing the error a "Disallowed system call: SYS_socketcall". But here it is said that it gives the output. How could this be possible?

Aamir said:   5 years ago
In fun function, only changes are made to p and *p, arr is unaffected. It is not being used on the left-hand side of any statement. So the line fun(4, arr) has no effect on the code.

Yogesh said:   1 decade ago
Whenever an array is passed as argument to a function, the pointer to the first element is actually passed. Then why the function fun () has no affect on its output. Please help.


Post your comments here:

Your comments will be displayed after verification.