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?
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.
ptr[x]is equivalent to*(ptr+x). This is really a basic syntax question.ptr[i]is exactly the same as*(ptr+i), you can also sayi[ptr]and kind of freak people out :-)ptr[i]and(ptr + i)are not the same thing - the first accesses the element at the array, while the second only computes the address, but adding the deference*(ptr + i)accesses the element.