C언어 16

Step15. 파일 입출력

- binary(b)와 텍스트(t) 파일로 나누어서 접근- 파일 접근 write(w), read(r), add(a) - 파일 모드는 파일 접근방식과 타입에 따라 다르다 텍스트 읽기 전용 = "rt" 텍스트 쓰기 전용 = "wt" 텍스트 추가 전용 = "at" 이진파일 읽기 전용 = "rb" 이진파일 쓰기 전용 = "wb" 이진파일 추가 전용 = "ab" - binary 타입은 메모리에 저장되있는 것 그대로 파일에 저장- 텍스트 타입은 변수에 있는 내용을 텍스트로 저장 - 파일 접근 패턴 //파일 구조체 생성FILE *file;//파일 연결file = fopen("경로","파일 모드"); //파일 입출력 실시fprintf(파일 구조체,"내용",파일에 넣을 변수);fprintf(file,"%d %s",123..

Step14. 선행처리자(#define/#include)

선행처리자라는 것은 컴파일 되기전에 실행하는 문법 - 전처리기로 매크로 함수 및 상수 선언- 단 매개 변수 부분에는 변수 앞에 변수 타입이 들어 가지 않는다. - 매크로명으로 코딩한 부분이 값으로 쓴 것이 컴파일시에 치환이 된다#define 매크로명 실제값ex> #define PI 3.14ex> #define MESSAGE "메세지 "매크로 함수 정의법ex> #define sum(a,b) (a+b)ex> #define 함수명(매개변수) (함수 내용)ex> #define 함수명(매개변수) { \코드;\코드; }ex> #define 함수명(매개변수) {코드;코드 } 예제>#define PI 3.14#define swap(a,b) { \ int temp = a; \ a = b; \ b = temp; \};#d..

Step12. 동적 메모리 할당(malloc/realloc)

- 기본 배열이 크기 고정이 되어있었기 때문에 메모리 낭비가 되거나 모자른 문제 생겼음 프로그래머가 필요한만큼 메모리를 할당/재할당 하는 방법이 나왔음 - malloc 사용법(할당)(가리킬 변수 타입의 포인터)malloc(바이트 크기); ex>int *ptr;ptr = (int *)malloc(20);//사용은 배열쓰듯이 사용 - realloc 사용법(재할당) ex>ptr = (int *)realloc(재할당할 포인터, 재할당할 크기);//재할당 수행시 할당한 메모리가//기존 작으면 맨 끝에 있는 데이터부터 지워짐 기본예제>#include #include void main(){ int *arr; int size=10,i; arr = (int *)malloc(sizeof(int)*size); for(i=0;i

Step11. 구조체(struct)

- 데이터의 집합체 - 상품 : 상품명, 가격, 바코드...... 코드로 실제 데이터에 해당하는 대상을 표현한 것으로 하나의 객체가 가질수 있는 변수의 집합체 기본 문법> struct 구조체명{ 필요한 변수 선언; }; typedef struct 구조체명{ 필요한 변수 선언; }별칭; 기본 예제> #include //구조체(struct) //구조체 문법 /* struct 구조체명{ 필요한 변수 선언; .... }; */ struct person { char name[30]; int age; }; int main(void) { struct person p; printf("나이 입력 : "); scanf("%d", &p.age); printf("이름 입력 : "); scanf("%s", p.name); pr..

Step10. Call by Value, Call by Reference

- Call by Value(값에 의한 호출) 메인에서 함수 호출할 때 변수의 주소 보내는 것이 아니라 변수의 값만 보내주기 때문에 메인에 있는 변수에 영향을 미치지 않는 형태. void plus(int a, int b){a++;printf("%d\n",a+b);}void main(){int a=10,b=20;plus(a,b); //31 출력printf("%d %d\n",a,b);//10 20 출력} - Call by Reference(참조에 의한 호출) 메인에서 함수 호출 할때 변수의 값을 보내는 것이 아니라 메인에 있는 변수의 주소를 보내 주기 때문에 함수에서는 매개변수를 포인터 형태로 받는 함수 형태. void plus(int *a, int *b){(*a)++;printf("%d\n",*a+*b);..

Step8. 포인터

자기 자신은 값을 가질수는 없지만, 다른 변수나 메모리에 있는 값을 가리키는 변수포인터는 자기 자신이 값이 없기 때문에 다른 변수의 주소나 메모리 주소값을 가지고 있다.포인터는 메모리 주소를 가지고 있기 때문에 타입에 상관 없이 4Byte가 할당이 된다.포인터 연산시 주의해야할 사항으로 포인터 증감 연산시 +1이 포인터가 가리키는 변수 타입 크기 만큼 증가 되가 된다. 포인터 선언법-> 변수타입 *변수명; ex1>int k=10;int *ptr; ptr = &k;//*ptr++;// 연산자 우선 순위에 의해 ptr에 저장된 주소값이 증가(*ptr)++;// 11, 포인터가 가리키고 있는 값 증가ex2>int k[5] = {1,2,3,4,5};int *ptr ;//ptr = &k[0];ptr = k;int..