Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Arrays & pointers in C

Tags:

c

pointers

So I have the following code snippet:

#include <stdio.h>

void pointer_shift(int *a, int n);

int main(void) {
    int a[] = {100, 101, 102};
    pointer_shift(a1, 3);
}

void pointer_shift(int *a, int n) {
    int i;
    for (i = 0; i != n - 1; i++) {
        *(a + i) = *(a + i + 1);
    }
}

I just want to clarify how the pointers work in this snippet. So pointer_shift takes in 'a', a pointer to an int, correct? a1 is passed in to this parameter, and since arrays decay to a pointer to their first element, it works.

First of all, hopefully what I said in the above paragraph is correct. Secondly, what does *(a + i) = *(a + i + 1); actually do? Say we're on the first iteration of the for loop, and i = 0. Then the left side, *a, accesses what, exactly? Does it represent a pointer? I thought * was the dereferencing operator, and accesses the object that a pointer points to... And so then it sets *a = *(a + 1). (a + 1) is the next element in the array, but what exactly does this assignment do, and why?

Thanks!

like image 885
r123454321 Avatar asked Jul 25 '26 14:07

r123454321


1 Answers

It is actually not pointer shift, but value shift, *(a+i) is of same effect as a[i], so what it does is a[i] = a[i+1]

like image 110
Baiyan Huang Avatar answered Jul 27 '26 05:07

Baiyan Huang



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!