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