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?