Consider the following array:
int arr[5] = {1,2,3,4,5};
We know that name of the array points to address of first element of array i.e. address of 1 here.
So, the following code:
printf("%u",arr);
will give address of 1 in this case. This address of 1 is constant and cannot be changed. So, in a C program, it is not possible to change the value of arr.
The following code will give an error: lvalue required as left operand
#include
int main(){
int arr[5] = {1,2,3,4,5};
arr++;
return 0;
}
Even if you give a lvalue by modifying the code as below, it will still throw a compilation error.
error: incompatible types when assigning to type 'int[5]' from type 'int *'
int main(){
int arr[5] = {1,2,3,4,5};
arr = arr +1;
return 0;
}
Thus, important thing to understand here is, we are missing out on a key concept.
Here, arr is a constant just like a const variable which cannot be changed and any attempt to change that value will result in a compilation error.
It will be more comprehensible if the error "lvalue required as left operand" would have read "arr is a constant and cannot be changed".
Having said that, the following operation is valid.
int main(){
int arr[5] = {1,2,3,4,5};
printf("%d\n", *(arr + 1));
return 0;
}
This is because, we are fetching the value at index 1 of array arr and not increasing the value of arr.
This is similar to int y = x +5;
We are not increasing the value of x here. We are just adding 5 to value of 5 and assigning it to y.
int arr[5] = {1,2,3,4,5};
We know that name of the array points to address of first element of array i.e. address of 1 here.
So, the following code:
printf("%u",arr);
will give address of 1 in this case. This address of 1 is constant and cannot be changed. So, in a C program, it is not possible to change the value of arr.
The following code will give an error: lvalue required as left operand
#include
int main(){
int arr[5] = {1,2,3,4,5};
arr++;
return 0;
}
Even if you give a lvalue by modifying the code as below, it will still throw a compilation error.
error: incompatible types when assigning to type 'int[5]' from type 'int *'
int main(){
int arr[5] = {1,2,3,4,5};
arr = arr +1;
return 0;
}
Thus, important thing to understand here is, we are missing out on a key concept.
Here, arr is a constant just like a const variable which cannot be changed and any attempt to change that value will result in a compilation error.
It will be more comprehensible if the error "lvalue required as left operand" would have read "arr is a constant and cannot be changed".
Having said that, the following operation is valid.
int main(){
int arr[5] = {1,2,3,4,5};
printf("%d\n", *(arr + 1));
return 0;
}
This is because, we are fetching the value at index 1 of array arr and not increasing the value of arr.
This is similar to int y = x +5;
We are not increasing the value of x here. We are just adding 5 to value of 5 and assigning it to y.
No comments:
Post a Comment