Rizwan Mohamed Kareem
Rizwan Mohamed Kareem

Reputation: 43

Why does a single pointer act like an array and the dereference operator (*) isn´t needed to access the pointed element?

int *insertZeroPosition(int *pf,int n,int k){
    int *ptr=(int *)calloc(n+1,sizeof(int));
    int i;
    ptr[0]=k;
    for (i=1;i<n+1;i++,pf++){
        ptr[i]=*pf; 
    }
    return ptr;
}

Why is it ptr[i]=*pf instead of *ptr[i]=*pf even though ptr is a pointer?

Upvotes: 3

Views: 153

Answers (1)

Govind Parmar
Govind Parmar

Reputation: 21542

The syntax p[i] is equivalent to *((p) + (i)). The dereference is still there, even with the array-subscript syntax.

C Standard, § 6.5.2.1.2:

The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2))).

You can rewrite the code to say *(ptr + i) = *pf if you want; there's no difference.

Upvotes: 5

Related Questions