본문 바로가기
비트 단기/c

11/5 포인터 구조체

by woohyun22 2018. 11. 5.
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 = &num;
    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 = &num;
    b[0].z = new short;
    delete b[0].z;
 
    b[0].z = &num;
    b[0].z = new short[10];
    delete []b[0].z;
    
    b[1].z = &num;
    b[1].z = new short;
    delete b[1].z;
    
    b[1].z = &num;
    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->= 10;
 
    c->y[0= 20;
    c->y[1= 30;
    c->y[2= 40;
    
    c->= new short;
    *c->= 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->= 10;
    c->y[0= 20;
    
    c->= &num;
    c->= new short;
    delete c->z;
 
    c->= 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

댓글