#include #include using std::cin; using std::cout; using std::endl; struct pos { int x; int y; }; class Hebi { pos Pos; public: Hebi(){} ~Hebi(){} void SetPos(int x, int y) { Pos.x = x; Pos.y = y; } void PrintPos() { printf("Pos(%2d,%2d)\n", Pos.x, Pos.y); } }; int main() { ////int a[10]; //int a = 10; //double b = 20.4; //printf("a=%5d addr=%p\n", a, &a); //printf("b=%5.2lf addr=%p\n", b, &b); //int* pa = nullptr;//アドレスのゼロ //double* pb = nullptr;//アドレスのゼロ //printf("new 前\n"); //printf("pa=%p\n", pa); ////new 型 で空いている領域に 型分のデータを入れる領域を確保する ////newはアドレスを返す! //pa = new int; //*pa = 10; //printf("new 後\n"); //printf("pa=%p *pa=%5d\n", pa, *pa);//*はポインタの指すアドレスの中身を見るよ ////int 5個分の領域を空いているメモリ領域に見つけて、そのアドレスを返す ////[変数]ができる=好きな時に好きな大きさの配列を作れるよ //pa = new int[5];//同じポインタ変数を使っているので、元のメモリが宙ぶらりんになってる(怖い) //pa[0] = 1; //pa[1] = 2; //pa[2] = 3; //pa[3] = 4; //pa[4] = 10; //for (int i = 0; i < 5; i++) //{ // printf("pa[%2d]=%2d\n", i, pa[i]);//[]は指定した、アドレスの中身を見るよ //} pos position = { 3,5 }; //position.x = 3; //position.y = 5; Hebi snake; snake.SetPos(3, 5); snake.PrintPos(); pos* pPos = nullptr; pPos = new pos; (*pPos).x = 10; (*pPos).y = 5; printf("%p::pos(%2d,%2d)\n", pPos, (*pPos).x, (*pPos).y); pPos->x = 11; pPos->y = 6; printf("%p::pos(%2d,%2d)\n", pPos, pPos->x, pPos->y);//アロー演算子 //クラスの時はどうなるかな? // pPos = new pos[5]; //これはどうやってアクセスする? //後片付けはどうやるんだろう。。。 delete delete [] return 0; }