ポインタと配列
ポインタと配列
#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]と表記できる。