DynamicMemAllocプロジェクトのTableUtilit.hに関して質問です
①externはどのような意味でしょうか。つけているのはなぜですか?使用しなかった場合はどうなりますか
②dumpTable関数の宣言でconstが二回出てくるのはなぜですか?setupTable関数は1つなのでどのような目的や違いがあるのでしょうか?
namespace TableUtility
{
//外部で定義しているkTableSizeを宣言 extern const int kTableSize;
//---------------------------------
//tableを操作する関数
void setupTable(int* const table);
void dumpTable(const int* const table);
}
①externで宣言すると他のソースファイルでアクセスできるようになります。
TableUtility.hでkTableSizeがexternになってますので
TableUtility.cppのkTableSizeがmain.cppでアクセスできるようになります。
②void dumpTable(const int* const table);
constは値を変更禁止にするキーワードです。const int* const table
constを2回付けていますのでこの意味はポインターデータ(ポインター変数のメモリー領域データ)変更禁止とポインターが指す実際のデータを変更禁止にします。
両方変更できないのでデータ出力するだけの時に使うといいです。データを変更しないのでデータの安定性がいいです。
void setupTable(int* const table);
この場合はポインターデータ(ポインター変数のメモリー領域データ)変更禁止になります。setupTable関数でtable中のデータは変更可能なのでsetupTable関数でtableデータをセットしてます。
void setupTable(const int* table);
逆にこのパターンも宣言可能です。この場合はtable中のデータは変更禁止になりますがポインターデータは変更可能です。ポインターデータは変更可能なので他のtableデータを動的メモリー確保してそのデータをポインターが指すように変更することは可能です。