I am going through a cpp course and the instructor used the following notation to get a subarray of the current array
void f(int arr[], int len) {
if (len == 0)
return;
f(arr 1, len - 1); // arr 1 takes a subarray
...
}
I wanted to understand how the arr 1
notation works with regards to memory. Arrays are passed by reference, but when you arr 1 is a copy of the array from the provided offset created, or does it simply advance some pointer and no extra memory is used?
CodePudding user response:
This is generally avoided in c , but for learning purposes
arr 1
is arr
starting from the next element in the array. For example
char arr[] = "12345";
printf("%s\n", arr 1); //prints 2345
Pointer arithmetic applies, pointer is passed to printf
. Note that strlen(arr)
is 5
, while strlen(arr 1)
is 4
, this is where you get len - 1
*(arr 1)
is same as arr[1]
For example
printf("%c\n", *(arr 1)); //prints 2
printf("%c\n", arr[1]); //prints 2
Similar notation with integer arrays
int arr[] = {0,1,2,3,4};
printf("%d\n", *(arr 1)); //prints 1
CodePudding user response:
array is pass by pointer when you call in function see this