1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | FRUIT apple; FRUIT * banana; apple.color = 10; apple.price = 20; printf("%d %d\n", &apple.color, apple.color); banana = &apple;//apple의 주소,type맞춰주기 printf("%d %d\n", banana->color, &banana->color); banana = new FRUIT; banana->color = 30; banana->price = 40; printf("%d %d", banana->color, &banana->color); delete banana;//배열일때만 delete[] banana; | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | struct STAR { short x; short y[3]; short *z; }; int main() { STAR a; STAR b[2]; STAR *c; //ex1) a가 x를 제어함 a.x = 10; printf("%d %d\n", a.x, &a.x);//&는 x의 주소이다. 뒤에것이 앞으로나옴 printf("%d %d\n", a, &a);//a의 값, a의 주소(값이없어서 쓰레기값) //ex2) a를 거쳐서 y변수 세개를 제어 a.y[0] = 10; a.y[1] = 20; a.y[2] = 30; printf("%d %d\n",a.y[0],&a.y[0]);//배열은 일반변수 printf("%d %d\n",a.y[1],&a.y[1]);//배열은 일반변수 printf("%d %d\n",a.y[2],&a.y[2]);//배열은 일반변수 주소가 2씩 늘어남 - 구조체 주소증가가 2 //for문돌리는게 좋다. for (int i = 0; i < 3; i++) { printf("%d %d\n", a.y[i],&a.y[i]); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | struct STAR { short x; short y[3]; short *z; }; int main() { STAR a; STAR b[2]; STAR *c; //ex3) *z는 주소받기전에는 쓸수없다. a.z = &a.x;//공유됬다. printf("%d\n", &a.z); printf("%d\n", *a.z);//&이 앞으로 오듯이 특수문자 두개가 겹칠때에는 *을 앞으로 뺸다. //이때는 a가 (포인트변수가 아니고, -> 가없다), z의 *이다. - 내용표시 //ex4) 할당한개 a.z = new short;//z는 short type 한개받음 *a.z = 10; printf("%d %d\n", a.z,*a.z); delete a.z; | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | struct STAR { short x; short y[3]; short *z; }; int main() { STAR a; STAR b[2]; STAR *c; //ex5) 할당 여러개 a.z = new short[10]; *(a.z + 0) = 10; *(a.z + 9) = 90; // || a.z[7] = 70; //위의문법과 밑의 문법이 같다. 밑에 배열쓰는것이 훨씬편하다. printf("%d \n", &a.z[9]);//주소 printf("%d \n", a.z[9]);//값 printf("%d \n", *(a.z+9));//값 for (int i = 0; i < 10; i++) { a.z[i] = i; } for (int i = 0; i < 10; i++) { printf("%d %d\n", a.z[i],&a.z[i]);//값 } //이거 다시 보기 short num = 99; a.z = new short; a.z = # printf("%d %d\n", a.z, *a.z); // //b가 x를 제어 b[0].x = 10; b[1].x = 20; printf("\n\n"); for (int i = 0; i < 2; i++) { printf("%d %d \n", b[i].x, &b[i].x); } //b가 y를 제어 b[0].y[0] = 10; b[0].y[1] = 10; b[0].y[2] = 10; b[1].y[0] = 10; b[1].y[1] = 10; b[1].y[2] = 10; printf("\n\n"); printf("%d %d \n", b[0].y[0], &b[0].y[0]); printf("%d %d \n", b[0].y[1], &b[0].y[1]); printf("%d %d \n", b[0].y[2], &b[0].y[2]); printf("%d %d \n", b[1].y[0], &b[1].y[0]); printf("%d %d \n", b[1].y[1], &b[1].y[1]); printf("%d %d \n", b[1].y[2], &b[1].y[2]); //b가 z를 제어 한개 여러개 b[0].z = # b[0].z = new short; delete b[0].z; b[0].z = # b[0].z = new short[10]; delete []b[0].z; b[1].z = # b[1].z = new short; delete b[1].z; b[1].z = # b[1].z = new short[10]; delete []b[1].z; } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | struct STAR { short x; short y[3]; short *z; }; int main() { STAR a; STAR b[2]; STAR *c; //c가 x 제어 c = &a;//공유 c->x = 10; c->y[0] = 20; c->y[1] = 30; c->y[2] = 40; c->z = new short; *c->z = 50; printf(" %d %d %d %d %d", a.x, a.y[0], a.y[1], a.y[2], *a.z); delete c->z;//a.z가능 //*c가 y 제어 //*c가 z 제어 } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | struct STAR { short x; short y[3]; short *z; }; int main() { STAR a; STAR b[2]; STAR *c; short num = 99; c = new STAR;//메모리 생성 c->x = 10; c->y[0] = 20; c->z = # c->z = new short; delete c->z; c->z = new short[100]; delete[] c->z; c = new STAR[20];//*대신 [] //c[0].z = 0;//z 메모리공간이없음 for (int i = 0; i < 20; i++) { c[i].z = new short;//for문 돌면서 메모리를 계속 받아온다. *c[i].z = i; printf("%d %d\n", c[i].z, *c[i].z); } for (int i = 0; i < 20; i++) { delete c[i].z; } delete[] c;//해제하는 순서를 똑같이 해줘야된다. 순서대로. } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | struct STAR { short x; short y[3]; short *z; }; int main() { STAR a; STAR b[2]; STAR *c; //n개가 n개 제어 c = new STAR[2]; c[0].z = new short[3]; c[1].z = new short[5]; c[0].z[1] = 0; c[0].z[2] = 0; c[0].z[3] = 0; c[0].z[4] = 0; c[1].z[1] = 0; c[2].z[2] = 0; c[3].z[3] = 0; c[4].z[4] = 0; delete[] c[0].z; delete[] c[1].z; delete[] c; } | cs |
728x90
'비트 단기 > c' 카테고리의 다른 글
구조체 복습 11/06 (0) | 2018.11.07 |
---|---|
복습 (0) | 2018.11.06 |
11/2 구조체 복습 앞부분 확실히 하기 (0) | 2018.11.05 |
11/1 복습 포인터 보충1 (0) | 2018.11.05 |
10/30 복습 포인터부터 (0) | 2018.11.05 |
댓글