Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

  int x[] = {5};
  f(x);
  // WHAT IS THE VALUE OF X HERE?
see, it works in C as well.


In C, the value of x in that fragment is still the same: a pointer (ok, not exactly, but something which behaves like a pointer) to a memory location where an int can be stored. The f(x) call can't change that pointer.


Try doing something like &x, and you'll see that it doesn't actually reliably behave like a pointer.


So you get my point. 'x' is not going to be modified behind your back and it's pretty clear on the calling site. In C++ it isn't clear.


It is exactly the same between the two cases: the x object (either the array memory location or the integer memory location) can be changed by 'f' because mentioning the 'x' object name in a function call may implicitly converts to the address of the object, i.e. it passes by reference).


> can be changed by 'f' because mentioning the 'x' object name in a function call may implicitly converts to the address of the object

(1) They are two different types and (2) it's clear to you at the calling site!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: