よくポインタと配列といわれますが、意味は異なりますので混同しないようにしてください。
ポインタとは変数のアドレスを格納する為のものです。
ポインタ変数を宣言する場合は変数名に*を付けます。
変数のアドレスを所得する場合は&を付けます。
実際に使用するとどういう風になるかを出力する用例が以下のプログラムです。
アドレスの番号を表示するのもありますが、こちらの結果は環境により変わります。
何故環境によって変化するのかを大事な疑問点と理解してください。
変数などの通常のデータが格納されるメモリのアドレスは動作環境によって異なり、
宣言するタイミングでも変る可能性があるからです。
逆を言えば、ポインタの使い方を一歩誤ると、触れてはいけない
メモリのデータを参照して、それを破壊した結果システムの暴走を
招く破壊プログラムを作ってしまう恐れがあることです。
不具合による異常終了の原因の有力候補なので注意してください。
配列の参照もC言語ではポインタの参照につながるので、
同様の症状が発生する可能性があります。
言語によっては(特にJava)例外が発生して被害を最小限にする仕組みになっているのもあります。
#include <stdio.h>
void main(){
int i;
int *p;
// データの格納
i = 1234;
// ポインタのセット
p = &i;
printf("変数を参照%d\n",i);
printf("ポインタから参照%d\n",p);
printf("変数のアドレスを参照%d\n",&i);
}