プログラミング言語 C

変数 p_message が
char *p_message
のように宣言されると、文
p_message = "now is the time";
では p_message へ 実際の文字列の (先頭の) ポインタが代入される。 これは 文字列のコピーではなくて、ポインタのみの代入となる。
関数 strcpy を つくって 文字列 t を 文字列 s にコピーする場合、単に s = t と するだけでは (ラクだけど) ポインタがコピーされるだけで、文字は代入できない。 文字をコピーするには ループが必要となる。
(配列を用いた場合)

  1. void strcpy(char *s, char *t)
  2. {
  3. int i;
  4. i = 0;
  5. while ((s[i] = t[i]) != '\0')
  6. i++;
  7. }

(ポインタを用いた場合)

  1. void strcpy(char *s, char *t)
  2. {
  3. while ((*s = *t) != '\0') {
  4. s++;
  5. t++;
  6. }
  7. }

ここでは t と s とが 都合よく 初期化されたポインタとなり、t の終わりにある '\0' が s にコピーされるまで、一度に一文字ずつ 配列を進んでいく。


あまり使われないが * と ++, -- との組合せも可能である。例えば、
*--p
は p の指す文字を取り出す前に p をデクリメントすることを 表している。
以前 電卓プログラムでつくった 関数 push, pop では 実際に 下のように 使われていた。
*p++ = val; /* val をスタックに積む */
val = *--p; /* スタックの一番上を val に降ろす */
(p127-130)