ポインタ

ポインタ (pointer) は他の変数のアドレスを格納するための 2 バイト (near) または 4 バイト (far) の派生型で、演算子「*」を使って宣言します。
構文 * type
int a = 1;
int* ptr = &a; // ptr ← a のアドレス
int b = *ptr; // b ← ptr のポイント先 = a の値
int** pp = &ptr; // pp ← ptr のアドレス
int c = **pp; // c ← pp のポイント先のポイント先 = a の値

ポインタの値は加減算を行うことができます。1 を加減算すると、ポイント先の型のサイズだけ値が増減するので注意してください。
void func ( char* ptr1, long* ptr2 ) {
  ptr1++; // ptr1 の値が 1 増える
  ptr2++; // ptr2 の値が 4 増える
  ptr1 += 10; // ptr1 の値が 10 増える
  ptr2 += 10; // ptr2 の値が 40 増える
}

以下にさまざまな例を示します。
char* ptr; // char データを指すポインタ
int* ptr2; // int データを指すポインタ
char a[10];
ptr = a; // 有効
ptr2 = a; // ポイント先の型が違うため、警告される
char** ptr3; // ポインタを指すポインタ
char* ptr4[10]; // ポインタの配列 (10 個の char* ポインタ)
char (*ptr5)[10]; // 配列へのポインタ
 
char* p1;
p1++; // 1 増加
short* p2;
short* p2b = p2;
p2++; // 2 増加
p2 += 3; // 3 * sizeof(short) = 6 増加
int d = p2 - p2b; // d = 8 / sizeof(short) = 4
 
void (*func)( int ); // 関数へのポインタ
(*func)( 12 ); // ポインタを介した関数呼び出し
func( 12 ); // こう書いても同じ