+ 1
Doubt in Call by reference
I have a doubt in the program attached. I do understand that we are passing the address of 'a' and using the deferencing operator in the function. Inside the function, using the de-referencing operator, we are changing the value of a. But, my question is why is it mandatory to give sample(int *x) instead of just sample(int x). I understand that the value of 'a' will not be changed if * is not used. But, how do I put whatever happens technically? https://code.sololearn.com/cn4rn81VkvcX/?ref=app Plz help me with this. Thanks in advance Guyz!
3 Respostas
+ 2
void foo(int *x)
{
//I need a memory address : then I can access to the value stored at address X and modify it
}
void foo(int x)
{
//I want a value (not an address)
}
+ 2
I'd like to add, unlike variables and objects which by default are passed to functions by value, the default scheme for passing an array to a function like `f()` is done by reference — precisely, the name of the array is pointed to the first element of the array. In fact, It makes sense if you think of passing a large sequence of numbers by reference, otherwise, it should've been done by making a temporary array, copying a whole lot of numbers to it, and returning the entire array to the caller which require a tremendous amount of work.
Example
~~~~~~~~~
void f(int arr[], int size) { // Also, `int *arr` can be used instead of `int arr[]`
// do stuff...
}
int main()
{
int a[3] = {1, 2, 3};
f(a, 3); // passing the array by reference.
}
+ 1
Thanks Théophile . So, it is like mandatory to use a * if I need to access the address and change its value.