딩굴댕굴

C 19Day (20160202)

by jennysgap

BOX

포인터의 포인터

(메모리 상의 구조를 그림으로 표현해보기!)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
int main(void)
{
    double num = 3.14;
    double * ptr = &num;
    double ** dptr = &ptr;
    double * ptr2;
 
    printf("%9p %9p \n", ptr, *dptr);     //%p 주소형태로 출력
    printf("%9g %9g \n", num, **dptr);    //%g 실수형태로 출력
    ptr2 = *dptr;
    *ptr2=10.99;
    printf("%9g %9g \n", num, **dptr);
 
    return 0;    
}
cs






포인터 배열과 포인터 배열의 포인터 형

(메모리 상의 구조를 그림으로 표현해보기!)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main(void)
{
    int num1=10, num2=20, num3=30;
 
    int *ptr1 = &num1;
    int *ptr2 = &num2;
    int *ptr3 = &num3;
 
    int * ptrArr[]={ptr1,ptr2, ptr3};    //포인터배열 각 값에는 주소값이 입력됨
    int **dptr = ptrArr;                 //int **dptr = &ptrArr[0]
 
    printf("%d %d %d \n"*(ptrArr[0]), *(ptrArr[1]), *(ptrArr[2]));
    printf("%d %d %d \n"*(dptr[0]), *(dptr[1]), *(dptr[2]));
 
    return 0;
}
cs







당신은 게임프로그래머입니다.

RPG 장르, 유저들의 캐릭터 생성을 하는데 필요한 것들은?

  • name

  • level

  • 능력치 (str, dex, int, luk)

1
2
3
4
5
6
#include <stdio.h>
int main(void)
{
    char name[10];
    int level, str, dex, luk;
}
cs




구조체 (=사용자 정의 자료형)

  • 하나 이상의 변수를 그룹 지어서 새로운 자료형을 정의하는 것

    (정의만 한 것!, 메모리 할당 No, 변수선언(구조체변수) 해야 메모리 할당됨) 

  • 붙어 다니게 되는 데이터들은 하나로 묶어서 관리하는 것이 편리하다.

    (관련있는 데이터를 그룹지어 새로운 자료형을 정의)


구조체의 쓰임

  • 복잡한 데이터를 표현할 때 구조화 하여 정의

  • 윈도우 운영체제는 대부분 구조체로 이루어져 있다.

  • 표현하고자 하는 객체에 대해서 구조화 한다.

    ex) 학생 :   나이, 성별, 이름, 성적 등

    ex) 도서정보 :   저자, 판매가격, 출판사, 출판날짜 등

    ex) 게임유저 :   보유한 돈, 능력치, 아이템, 현재위치 등



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
struct mk_char            //구조체 정의 (=새로운 자료형을 만들었다.)
{
    char name[20];
    int level, str, dex, luk;
};                        /*함수가 아니기 때문에 세미클론(;)입력*/
 
int main(void)
{
    // 자료형 변수명;
    struct mk_char user1;    //구조체변수를 선언
 
    scanf("%s", user1.name);
    user1 . level=1;        //각 구조체 멤버에 값을 입력
    user1 . str=10;
    user1 . dex=999;
    user1 . luk=10;
 
    printf("%s\n", user1.name);
    printf("%d %d %d %d\n", user1.level, user1.str, user1.dex, user1.luk);
}
cs








NPC같은 경우 유저처럼 이름을 부여 받는 것이 아닌 

캐릭터가 생성동시에 이름도 부여되어 있습니다. 


문자를 복사해줄 수 있는 함수 strcpy()


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <string.h>            //strcpy 사용
 
struct mk_char
{
    char name[20];
    int level, str, dex, luk;
};
 
int main(void)
{
    struct mk_char npc;        
 
    //npc.name="주먹펴고 일어서";     x
    strcpy(npc.name, "주먹펴고 일어서");        //문자열 복사할 때 사용하는 함수
 
    printf("%s\n", npc.name);
}
cs




위 상황에서는 strcpy를 사용안하고 이름을 부여할 수 있음

(선언과 동시에 초기화)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
struct mk_char
{
    char name[30];
    int level, str, dex, luk;
};
 
int main(void)
{
    struct mk_char npc={"주멱펴고 일어서"0000};    //선언 & 초기화
 
    printf("%s\n", npc.name);
}
cs










20160202 c언어 19day.txt



반응형

'BOX' 카테고리의 다른 글

자료구조 1Day (20160204)  (0) 2016.02.05
C 20Day (20160203)  (0) 2016.02.03
C 18Day (20160201)  (0) 2016.02.02
C 17Day (20160129)  (0) 2016.01.31
C 16Day (20160128)  (0) 2016.01.31

블로그의 정보

jennysgap

jennysgap

활동하기