Comprehending some C code (simple function calls)

Click For Summary
The discussion revolves around understanding a C code snippet that includes function calls and parameter passing. The main function calls FindSum with different sets of variables, leading to confusion about whether the original variables are modified. It clarifies that the first two parameters are passed by value, meaning only copies are sent, while the third parameter is passed by reference, allowing it to modify the original variable. The responses emphasize that only the variable referenced by the pointer can be changed, and the calculations within FindSum are explained in detail. Overall, the code demonstrates how function parameters work in C, particularly the distinction between value and reference passing.
Arnoldjavs3
Messages
191
Reaction score
3

Homework Statement


Hi, I have a piece of code that I'm trying to comprehend but I don't understand some aspects. Here is that code:

Code:
#include <stdio.h> 

/* function prototype declaration for FindSum */

void FindSum(int, int, int *);

int main(void)
{

int a=2, b=5, c=1, x=3, y=4, z=7; 

/* body of main */

 FindSum (a, b, &c); /* a first call to FindSum */ 
 printf(“first call in main %d %d %d %d %d %d \n”, a, b, c, x, y, z); 
 FindSum (x, y, &z); /* a second call to FindSum */
 printf(“second call in main %d %d %d %d %d %d \n”, a, b, c, x, y, z); 

return 0;

}/* definition of FindSum */

void FindSum (int a, int b, int *c)
{

 a += (b * 2);
 b += (b * 2);
*c += (b * 2);

 printf(“in FindSum: %d %d %d \n”, a, b, *c); 

}

Homework Equations

The Attempt at a Solution



The first things I'm trying to get a grasp on:
In the main function, where it first calls FindSum it has a b c as its parameters, and in the second call it has x y and z. Is this initial call to the function only going to edit the values of the integers for a b and c? Would it simply then shout out the values of x y and z? If this is the case, I'm assuming it would do the same for the second call to the function, but for x y and z. (And this is where it begins to confuse me)

In the function of FindSum, it only modifies the value of a, b, and c. During the second call to the function FindSum, would it simply echo the values of x y and z? They won't be changed?

And in the line "b += (b*2)" would it be

a += (5 *2)
b += (5 * 2)
*c += (10 * 2)

Sorry for all the questions. I'll try compiling the code when I'm at home, but for now I just want to try acting like the computer. Thanks alot!
 
Physics news on Phys.org
Arnoldjavs3 said:
Is this initial call to the function only going to edit the values of the integers for a b and c?
No. The first two parameters (here a and b) are called by value, which means that just a copy is sent to FindSum. The third parameter (here c) is called by reference, which means that it may be changed by FindSum.
Arnoldjavs3 said:
Would it simply then shout out the values of x y and z?
What exactly do you mean by that?
Arnoldjavs3 said:
In the function of FindSum, it only modifies the value of a, b, and c
Oops - inside FindSum, a, b and c refers to the parameters to the function, not to the variables with the same name in main. As I explained above, only the third parameter may be assigned to - and it is.
Arnoldjavs3 said:
During the second call to the function FindSum, would it simply echo the values of x y and z? They won't be changed?
Again: A copy of x and y are sent to FindSum as parameters. FindSum modifies the variable referenced by the third parameter, so z will be changed.
Arnoldjavs3 said:
a += (5 *2)
b += (5 * 2)
*c += (10 * 2)
Almost correct - but since b was 5 to begin with, when you add (5*2), it becomes 15 before the line with *c. Thus *c += (15*2).
 

Similar threads

  • · Replies 17 ·
Replies
17
Views
2K
  • · Replies 3 ·
Replies
3
Views
1K
  • · Replies 1 ·
Replies
1
Views
11K
  • · Replies 3 ·
Replies
3
Views
1K
  • · Replies 12 ·
Replies
12
Views
2K
  • · Replies 3 ·
Replies
3
Views
1K
  • · Replies 4 ·
Replies
4
Views
2K
Replies
7
Views
2K
  • · Replies 3 ·
Replies
3
Views
1K
  • · Replies 19 ·
Replies
19
Views
3K