ポインタと配列

ポインタと配列

#include<stdio.h>

int main(void){
        int i;
        int vc[5] = {10,20,30,40,50};
        int *ptr = &vc[0];
           
        for(i=0;i<5;i++){
                printf("vc[%d] = %d     ptr[%d] = %d    *(ptr + %d) = %d\n",
                        i,vc[i],i,ptr[i],i,*(ptr + i));
        }   

        return 0;
}

実行結果

vc[0] = 10	ptr[0] = 10	*(ptr + 0) = 10
vc[1] = 20	ptr[1] = 20	*(ptr + 1) = 20
vc[2] = 30	ptr[2] = 30	*(ptr + 2) = 30
vc[3] = 40	ptr[3] = 40	*(ptr + 3) = 40
vc[4] = 50	ptr[4] = 50	*(ptr + 4) = 50

ptrはvc[0]を指すので、*ptrはvc[0]のエイリアス(別名)となる。
ポインタptrに対して、整数iを加えたり、減じたりした式も、ポインタになる。

  • ptr + iは、ptrが指すオブジェクトのi個後ろの要素を指すポインタとなる。
  • ptr - iは、ptrが指すオブジェクトのi個前の要素を指すポインタとなる。
  • *(ptr + i)はptr[i]と表記できる。