By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,797 Members | 1,836 Online
Bytes IT Community
+ Ask a Question
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
Share this Question
Share on Google+
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.