C/C++のポインタの機能--変数の場所(アドレス) - builder by ZDNet Japan
int *n;
現在は本文が修正されています。
*n = 5; /* ポインタ変数nに値5を代入 */
C/C++のポインタの機能--配列との関係 - builder by ZDNet Japan
ポインタ変数と配列との深い関係を表す例を示そう。それは、配列の変数名をそのままポインタ変数名として扱えるということだ。
たぶん
int *n;
こう宣言するから
*n = 5;
こうしたくなる訳で
int* n;
こう宣言すれば、もしくは
typedef int * int_ptr
こうしておいて
int_ptr n;
こう宣言すれば
*n = 5;
こんな事が間違ってる事に気付くかな?
int m[] = {1,2,3,4};
int *n;
n = m;
ここでいうnへのmの代入は、mの先頭アドレスをnが指しているだけなのです。ポインタは「指し棒」!配列はメモリのかたまり!※最近のC言語の本って「先頭アドレス」って表現あまり見ない気がする。
ちなみに、間違っても
char* n, m;
m = "Hello, World";
とか
#define char_ptr char *
...
char_ptr n, m;
m = "Hello, World";
しちゃ駄目(typedef使ってね)。ちなみに...
char *s = "abc";
と
char s[] = "abc";
の話も前者が「ポインタ型」、後者が「配列型」と考えればいい。つまり
typedef char char4[4];
char4 n = "abcef"; // char[4]型変数をchar[6]で初期化
こうすると、コンパイラによっては警告出力してくれる訳です。