今日のひらしょー本(20150317): Cp1

今日からちょっとでもわかったことを書いていく.

今日のひらしょー本の目次

http://snoopopo.hatenablog.com/entry/2015/04/27/114854

constなポインタ → const char* p; でポインタ宣言した場合

const char stageData[] = "\
#\#\#\#\#\#\#\#\n\
# .. p #\n\
# oo   #\n\
#      #\n\
########\n\
";

void initialize( Object* state, int width, int /* height */, const char* stageData ){  
    const char* d = stageData; //読み込みポインタ
    int x = 0;
    int y = 0;
    while ( *d != '\0' ){ //NULL文字でない間
        Object t; //特に意味はないが使う回数が多い変数に私は良くtを使う。temporaryの略。たぶんよくない習慣だが、無駄に長い名前にして読みにくいのも困り物だろう。
        switch ( *d ){
            case '#': t = OBJ_WALL; break;
            case ' ': t = OBJ_SPACE; break;
            case 'o': t = OBJ_BLOCK; break;
            case 'O': t = OBJ_BLOCK_ON_GOAL; break;
            case '.': t = OBJ_GOAL; break;
            case 'p': t = OBJ_MAN; break;
            case 'P': t = OBJ_MAN_ON_GOAL; break;
            case '\n': x = 0; ++y; t = OBJ_UNKNOWN; break; //改行処理
            default: t = OBJ_UNKNOWN; break;
        }
        ++d;
        if ( t != OBJ_UNKNOWN ){ //知らない文字なら無視するのでこのif文がある
            state[ y*width + x ] = t; //書き込み
            ++x;
        }
    }
}

( 1.2.6 ステージ初期化 P.12 )

constなポインタ変数pはconstなのにwhileループしてるときにp++でインクリメントできてるのはなんで?値変わってない??( ゚д゚ )

と思ってしまったけど,

constなポインタ const char* p; のように宣言されたポインタは、ポインタが指した先の値は変えられないけど、指す先は変えられる。

今回は指してる先の値を変えたくないので,constをつけた。

20150321add-----------.

ポインタが指すデータについて↑では書いたけど、ポインタが指すデータを変えられないようにすることも出来る.

const char* p; //ポインタが指すデータにconstがついてる
char* const p; //ポインタ自体にconstがついてる=指すデータは変えられない
const char* const p; //ポインタも変えられないし、データも変えられない

* の左側にあればデータのこと言ってて、右側にあればポインタのこと言ってる.

EffectiveC++第3版の3項 可能ならいつでもconstを使おう で理解できた.

Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)

Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)

配列の宣言の仕方

javaだと、

char[] gStage = "##########";

だけど、C++だと、

char gStage[] = "##########";

[]の位置に注意。

VisualStudioとeclipseの違い

VisualStudioでコピーペーストしてもファイル自体がコピーされるわけではなく、 紐付けされるだけのようだ.

だから間違って、別プロジェクトでも使っている同一ファイルを編集してしまったりするので、ファイル自体を別にしたい場合は、エクスプローラとかでとりあえずコピーするかな,

前やったときもミスったような…