445,797 Members | 1,836 Online Need help? Post your question and get tips & solutions from a community of 445,797 IT Pros & Developers. It's quick & easy.

# Incrementing in C

 P: n/a Suppose I have a function foo: void foo(int x, int y) { printf(" %d ", y); x = y; } I have two ints a and b. a = 7; b = 7; then I call foo(a, ++b); For some reason at the end of running foo, I get a = 7 and b = 8. Why do I not have a = b = 8? Thank you much! Nov 1 '06 #1
3 Replies

 P: n/a jobo wrote: Suppose I have a function foo: void foo(int x, int y) { printf(" %d ", y); x = y; } I have two ints a and b. a = 7; b = 7; then I call foo(a, ++b); For some reason at the end of running foo, I get a = 7 and b = 8. Why do I not have a = b = 8? Because x is local to the function foo. In C function arguments are passed by value, not by reference. If you want a function to change an object in the calling function, you must pass in a pointer: void foo(int *x, int y) { *x = y; } and call it: int a, b; .... foo(&a, b); -- Thomas M. Sommers -- tm*@nj.net -- AB2SB Nov 1 '06 #2

 P: n/a jobo wrote: Suppose I have a function foo: void foo(int x, int y) { printf(" %d ", y); x = y; } The assignment of `y` to `x` is pointless; `x` is a local variable that will evaporate when `foo` returns. I have two ints a and b. a = 7; b = 7; then I call foo(a, ++b); For some reason at the end of running foo, I get a = 7 and b = 8. Well, yes. You assigned `7` to `a` and `b` and incremented `b`. Calling `foo` doesn't change that. Why do I not have a = b = 8? Because the assignment of `y` to `x` is pointless; `x` is a local variable that will evaporate when `foo` returns. -- Chris "echo echo" Dollin "Never ask that question!" Ambassador Kosh, /Babylon 5/ Nov 1 '06 #3

 P: n/a jobo wrote: Suppose I have a function foo: void foo(int x, int y) { printf(" %d ", y); x = y; } I have two ints a and b. a = 7; b = 7; then I call foo(a, ++b); For some reason at the end of running foo, I get a = 7 and b = 8. Why do I not have a = b = 8? C passes values. When you call 'foo', the values in your a and b variables are "copied" to the variables x and y. After that there's no relation between a,b and x,y. Nov 1 '06 #4

### This discussion thread is closed

Replies have been disabled for this discussion. 