const
constを使いこなそう!
#include <stdio.h> int main(int argc, char *argv[]) { char abc[] = "abc"; const char *p1 = abc; char * const p2 = abc; printf( "p1 = %s\n", p1 ); p1++; printf( "p1 = %s\n", p1 ); p1++; printf( "p1 = %s\n", p1 ); printf( "p2 = %s\n", p2 ); // p2++; error: increment of read-only variable ‘p2’ p1 = abc; // p1[0] = 'd'; error: assignment of read-only location printf( "p1 = %s\n", p1 ); // p2 = abc; error: assignment of read-only variable ‘p2’ p2[0] = 'd'; p2[1] = 'e'; p2[2] = 'f'; printf( "p2 = %s\n", p2 ); printf( "abc[] = %s\n", abc ); return 0; }
実行結果
p1 = abc
p1 = bc
p1 = c
p2 = abc
p1 = abc
p2 = def
abc[] = def
constの位置によって意味が変わるよ!
ポインタに*を付けると、値を書き換えられるの覚えているかな?
constがchar *に掛かっていると、
値の書き換えをCコンパイラさんが監視してくれるよ。
p2は、char *ではなくて、p2にconstが掛かっているね。
これだと、p2そのものを変更出来ないようにCコンパイラさんが監視してくれるよ。
でも、p2を使って値の書き換えは出来ちゃうから、
こういう使い方はあまりしないよ。
p1は、途中で配列の先頭アドレスを代入出来るけど、
p2は、constで監視されているのも確認してね。
関数の引数でポインタを受け取るときに、
このポインタを使って書き換えは行わないよって宣言するのに、
constはよく使われるよ。
前回のソースコードをもう一度、確認してみてね!
Leave a Comment