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つだよ。

p[0][0] = 'c';
これは、str1の最初の文字を書き換えるコードだけど、
1つ目の const char * でエラーになるよ。

p[0] = p[1];
これは、pStrArray[0]の値(アドレス)を、
pStrArray[1]の値(アドレス)で書き換えるコードだけど、
2つ目の const * でエラーになるよ。

書き換えてはいけない変数や配列も、
こうやってCコンパイラさんに監視して貰えば、
後々のメンテナンスもきっと楽になるからちゃんと理解してね!

Leave a Comment