*(a++) is giving error but not *(a+1)?? where a is array name?

前端 未结 3 1742
隐瞒了意图╮
隐瞒了意图╮ 2021-01-12 10:51

In following code:

void main()
{
    char a[]={1,5,3,4,5,6};
    printf(\"%d\\n\",*(a++)); //line gives error: wrong type argument to increment
    printf(\"         


        
相关标签:
3条回答
  • 2021-01-12 11:01

    'a' behaves like a const pointer. 'a' cannot change it's value or the address it is pointing to. This is because compiler has statically allocated memory of size of array and you are changing the address that it is referencing to.

    You can do it as follows instead

    void main()
    {
    char a[]={1,5,3,4,5,6};
    char *ch;
    ch=a;
    printf("%d\n",*(ch++)); //this lines gives error no more
    printf("%d\n",*(ch+1));
    }
    
    0 讨论(0)
  • 2021-01-12 11:02

    a is an array object and not a pointer so you could not use the operation a++ for an array object. because this is equivalent to :

    a = a+ 1;
    

    Here you are assigning to the array object a new value which is not allowed in C.

    a + 1 return a pointer to the element 1 of your a array and it's allowed

    0 讨论(0)
  • 2021-01-12 11:28

    Okay seriously bad coding practices: However let's first address your issue:

    printf("%d\n",*(a++)); //this lines gives error: wrong type argument to increment
    

    can't be used because a is an implicit reference to the array;

    You CAN do this:

    char b[]={1,5,3,4,5,6};
    char *a = b;
    printf("%d\n",*(a++)); //this lines will not give errors any more
    

    and off you go...

    Also *(a++) is NOT the same as *(a+1) because ++ attempts to modify operand whereas + simply add one to constant a value.

    0 讨论(0)
提交回复
热议问题