constとポインタのポインタ
constが2つ???
#include <stdio.h> void printStrings(const char * const *p) { // p[0][0] = 'c'; error: assignment of read-only location // p[0] = p[1]; error: assignment of read-only location printf( "p = %s\n", *p ); p++; printf( "p = %s\n", *p ); p++; printf( "p = %s\n", *p ); } int main(int argc, char *argv[]) { const char str1[] = "a"; const char str2[] = "bc"; const char str3[] = "def"; const char *pStrArray[] = { str1, str2, str3 }; printStrings( pStrArray ); return 0; }
実行結果
p = a
p = bc
p = def
今日は、constが2つだよ。
これは、str1の最初の文字を書き換えるコードだけど、
p[0][0] = 'c';
1つ目の const char * でエラーになるよ。
これは、pStrArray[0]の値(アドレス)を、
p[0] = p[1];
pStrArray[1]の値(アドレス)で書き換えるコードだけど、
2つ目の const * でエラーになるよ。
書き換えてはいけない変数や配列も、
こうやってCコンパイラさんに監視して貰えば、
後々のメンテナンスもきっと楽になるからちゃんと理解してね!
Leave a Comment