プログラミング言語 C
変数 p_message が
char *p_message
のように宣言されると、文
p_message = "now is the time";
では p_message へ 実際の文字列の (先頭の) ポインタが代入される。 これは 文字列のコピーではなくて、ポインタのみの代入となる。
関数 strcpy を つくって 文字列 t を 文字列 s にコピーする場合、単に s = t と するだけでは (ラクだけど) ポインタがコピーされるだけで、文字は代入できない。 文字をコピーするには ループが必要となる。
(配列を用いた場合)
- void strcpy(char *s, char *t)
- {
- int i;
- i = 0;
- while ((s[i] = t[i]) != '\0')
- i++;
- }
(ポインタを用いた場合)
- void strcpy(char *s, char *t)
- {
- while ((*s = *t) != '\0') {
- s++;
- t++;
- }
- }
ここでは t と s とが 都合よく 初期化されたポインタとなり、t の終わりにある '\0' が s にコピーされるまで、一度に一文字ずつ 配列を進んでいく。
あまり使われないが * と ++, -- との組合せも可能である。例えば、
*--p
は p の指す文字を取り出す前に p をデクリメントすることを 表している。
以前 電卓プログラムでつくった 関数 push, pop では 実際に 下のように 使われていた。
*p++ = val; /* val をスタックに積む */
val = *--p; /* スタックの一番上を val に降ろす */
(p127-130)