Lvalue required error
While working with pointers i wrote the following code,
int main()
{
int a[]={10,20,30,40,50};
int i;
for(i=0;i<5;i++)
{
printf("\n%d",*a);
a++;
}
return 0;
}
Now as per my understanding array name itself is an address in c and the pointer arithmetic done is here is correct as per my knowledge. But when i try to run the code it is giving me "Lvalue Required" error.
So what is the exact reason for occuring Lvalue required error because before this also i have come across situations where this error is there. Secondly why the arithmetic on the pointer is not legal here in this case?
Solution 1:
You can't do a++
on a static array - which is not an Lvalue. You need to do on a pointer instead. Try this:
int *ptr = a;
int i;
for(i=0;i<5;i++)
{
printf("\n%d",*ptr);
ptr++;
}
Although in this case, it's probably better to just use the index:
int i;
for(i=0;i<5;i++)
{
printf("\n%d",a[i]);
}
Solution 2:
Under most circumstances, the name of an array evaluates to a value that's suitable to assign to a pointer -- but it's still a value, not an actual pointer.
This is analogous to a value like, say, 17
. You can take the value 17
, and assign it to an int. Once you do that, you can increment, decrement, and otherwise manipulate that int
. You can't, however, do much of anything to 17
itself -- it is what it is, and can't be changed.
The name of an array is pretty much the same way. It has the right type to be able to assign it to a pointer, but on its own it's just a value that you can't manipulate. If you assign that value to a pointer, you can manipulate the pointer, but you can never do much to the original value itself -- it is what it is, and can't be changed.
Solution 3:
http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Flvalue.htm
also i guess it depends on the compiler?