본문으로 바로가기

자료구조 수업 1

category [ IT ]/C++, 자료구조 2015. 6. 24. 22:19
#include <stdio.h>
int main(int argc, char *argv[])
{
return 0;

}



배열 : 같은 자료형을 동시에 여러개 선언해서 사용하는 것.

" datatype 배열이름 [배열크기] "

int num[5]={1,2,3,4,5}; // 4개만 쓰면 null, 즉 0으로 초기화 된다.
int num[]={1,2,3,4}; // 4칸만 생성 된다.
char str[10]="홍길동"; // 문자열 + null 문자가 들어간다. 총 7칸
%s = 주소를 받는다. 
printf("%s",str/*<-시작주소*/); //특정 시작 주소부터 null 문자까지 출력한다. 입력 받을때는 null문자(공백)를 받을때 까지.
double do[5];

char str1[7];

str1 = str ; //안 된다. 배열의 이름은 포인터 상수. 변하지 않는값이라 대입 불가. 
따라서 각각의 요소(변수)를 대입해준다.

for(int i = 0; str[i]!='\0';i++)
{
str1[i] = str[i];
}




배열의 이름 : 배열의 시작주소

주소 : 포인터 상수 (상수 : 변하지 않는 값). 따라서 주소는 변하지 않는다.


문자열 함수 

<string.h> // 문자열을 처리할 함수들이 들어있는 헤더 파일

strcpy(/*저장할 주소*/ str1, /*저장시킬 문자열의 주소*/ str); // strncpy : 길이까지 조절 가능.



포인터(=주소)



포인터 변수 : 주소를 담는 변수. 32비트 환경에서는 4바이트(8비트 * 4바이트 = 32비트), 16비트 환경에서는 2바이트.

포인터 변수 선언 : " data type* value name " 굵은 글씨까지가 데이터형. 
포인터 변수는 데이터형에 맞는 주소를 저장
                              int* pn; //데이터형이 정수인 데이터의 주소를 저장할 수 있다
                              char * pch;
        double *pd;
      pn = &a; // 가능
                              pn = &d; // 형태가 맞지 않아서 안 된다.
주소를 다 저장할 수 없기 때문에 시작주소만을 저장한다. 
주소값이기 때문에 저장을 가능하나, 주소로부터 데이터를 읽을 때 데이터형에 따라서 어디까지 읽을지 정하게 된다.
char형 포인터변수를 통해 값을 읽을때는 1바이트만 읽는식으로.


- 함수 선언

Return Type(int, char,int * 등등) funcName(영문,숫자,언더바 가능) (Input type)  선언시 ;

선언시에는 변수 이름은 없어도 되고 데이터 형만 있어도 된다. 위치는 main함수 이전에. ex) int add(int,int);
선언과 정의를 만들고 함수를 호출해서 사용. 함수의 이름을 이용.


디버그 모드 : F5 : 쭉 진행, F9 걸린데까지/F10 : 한단계씩 진행. F9 : 브레이크 포인트, F11 : 멈춘 지점의 함수로 들어가는 기능
Shift+ F5 : 디버그 종료

scanf("%dp%d",&n1,&n2); p = 구분자. 꼭 입력해줘야 한다. 보통 스페이스바를 사용.


구조체

사용자 정의 자료형
->(여러개의 자료형을 하나로 묶어서 하나의 자료형으로 만듬)
struct 구조체명{ -> 자료형을 만듬(틀)
멤버 변수1;
멤버 변수2;
멤버 변수3;
멤버 변수4;
};

붕어빵 기계(틀) -> 구조체
붕어빵        -> 구조체 변수

함수 내에서 구조체 변수 선언 후 사용
void main()
{
struct 구조체명 구조체변수명;

구조체변수명.멤버변수 = 초기값;
}

code = CPU, 실행코드
data = 전역변수
heap = 동적할당
stack = FILO : 선입후출 (first in last out)
           LIFO : 후입선출 (last in first out)


main = 20바이트(char 배열) + 4바이트(int형 page)
           하악하악\0               300


out = 하악하악 , 300을 넘김
함수에 구조체 값을 넘긴다 : 값대 값으로 복사를 한다는 뜻.

구조체를 이용한 함수(value)
함수에 구조체를 매개변수로 전달을 하면 구조체에 들어 있는 값이 복사되서 전달이 된다.

구조체 배열
배열 -> 같은 자료형을 여러개 선언

void main()
{
struct 구조체명 구조체변수명[배열크기];
}

동적할당 - > 사용자 정의 메모리 공간 할당
malloc.h 또는 stdlib.h 둘중 하나를 include 시켜줘야함

void * malloc(int);
void main()
{ int* ma;
ma = (int*)malloc(sizeof(int)*5);
for(int i=0;i<5;i++)
{
*(ma+i)=i;
}
}

할당 해제
free();