C Programming - Pointers - Discussion

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

int main()
{
    int i, a[] = {2, 4, 6, 8, 10};
    change(a, 5);
    for(i=0; i<=4; i++)
        printf("%d, ", a[i]);
    return 0;
}
void change(int *b, int n)
{
    int i;
    for(i=0; i<n; i++)
        *(b+1) = *(b+i)+5;
}
7, 9, 11, 13, 15
2, 15, 6, 8, 10
2 4 6 8 10
3, 1, -1, -3, -5
Answer: Option
Explanation:
No answer description is available. Let's discuss.
Discussion:
52 comments Page 3 of 6.

Karthik said:   1 decade ago
for(i=0; i<n; i++)2, 4, 6, 8, 10};
*(b+1) = *(b+i)+5;
In this for loop,only (b+1) location value is updated but not entire array
i.e 1st iteration (b+1)=(b+0)+5<=>2+5=7
2nd iteration (b+1)=(b+1)+5<=>4+5=9
after 5 iterations, the final value that is in (b+1) is
*(b+1)=*(b+4)+5<=>10+5=15;
change() will return an array *b whose *(b+1) location is updated by 15 Hence array a[] will hold values 2,15,6,8,10. since array a[] is passed into array b[](using pass-by-address) hence any changes made in b[] will reflect back in array a[].

Thomsika said:   1 decade ago
Can anyone explain me the concept clearly. I could not understand. What is the value of b?

Jyoti Nagpal said:   1 decade ago
Only a[1] value is changed. Reaming arrays value are same,

*(b+1) = *(b+i)+5;

b is base address +1 means assign the value to b[1];

Every time, each row is increment by 5 and assign to b[1].

At last value increment with five and finally overwrite value 10+5=15.

Prithviraj said:   1 decade ago
Answer is [B]. 2, 15, 6, 8, 10.

Because in the above code there are few mistakes.

1) There is no link between main program and function. i.e there is no prototype.

2) Return type is void.

XYZ said:   1 decade ago
*(a+i)=a[i]. that should give the address of a[i] right? why is it giving the value?

Vignesh said:   1 decade ago
Answer must be option a function definition is perform and return the value to the function call so it should be a option (A).

Pratik patel said:   1 decade ago
for(i=0; i<n; i++)
*(b+1) = *(b+i)+5; /*( b[1]=b[i]+5 ) . */

End time loop.
b[1] = b[5]+5.
b[1] = 10+5.
b[1] = 15.

Ans = 2, 15, 6, 8, 10.

Manoj said:   1 decade ago
Change the position of a[i] with respect to the position of the second element of the array.

Pankaj Singh said:   1 decade ago
*[b+1] = *[b+i]+5;
*[a+1] = *[b+0]+5;
a[1] = b[0]+5;
a[1] = 2+5;
a[1] = 7;

Now it will continuous till the b[i] = 10.
So a[1] = 15;

For other it will remain same.
2 15 6 8 10.
a[0] a[1] a[2] a[3] a[4].

Sujju said:   1 decade ago
#include<stdio.h>
int main(){
int a=5,b=10,c=15;
int *arr[]={&a,&b,&c};
printf("%d",*arr[1]);
return 0;

What is the o/p of above program?


Post your comments here:

Your comments will be displayed after verification.