Comprehending some C code (simple function calls)

Click For Summary
SUMMARY

This discussion focuses on understanding a C code snippet that involves function calls and parameter passing. The function FindSum modifies its parameters, where the first two parameters are passed by value and the third by reference. As a result, only the variable referenced by the pointer can be altered, while the values of the other parameters remain unchanged. Key points include the distinction between pass-by-value and pass-by-reference, and the impact of these methods on variable modification within the function.

PREREQUISITES
  • Understanding of C programming syntax and structure
  • Knowledge of function prototypes and declarations in C
  • Familiarity with pass-by-value and pass-by-reference concepts
  • Basic understanding of pointers and memory addresses in C
NEXT STEPS
  • Study C programming function prototypes and their usage
  • Learn about pointers and memory management in C
  • Explore the differences between pass-by-value and pass-by-reference in C
  • Practice writing and debugging C functions that manipulate variables
USEFUL FOR

C programmers, computer science students, and anyone looking to deepen their understanding of function calls and parameter handling in C.

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 a lot!
 
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
3K
  • · Replies 3 ·
Replies
3
Views
1K
  • · Replies 1 ·
Replies
1
Views
11K
  • · Replies 3 ·
Replies
3
Views
1K
  • · Replies 12 ·
Replies
12
Views
3K
  • · Replies 3 ·
Replies
3
Views
1K
  • · Replies 4 ·
Replies
4
Views
2K
Replies
7
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 17 ·
Replies
17
Views
2K