분류 전체보기 501

포인터를 더 활용해보기

우리는 포인터를 통해서 저배열안에 있는 인스턴스중에서 55와 22를 출력해야한다. int main(void) { int numArr[5] = { 11, 22, 33,44,55 }; int* numPtra; void* ptr; numPtra = &numArr[2]; ptr = numArr; printf("%d\n",*(numPtra+2)); //numPtra는 numArr의 3번째칸의 주소를 가지고 있으므로, 55을 출력하려면 그 주소에서 +2를 해야한다. printf("%d\n", *((int*)ptr+1)); // ptr은 numArr의 주소를 가지고 있으므로 그리고 몇번째 칸에 있는지 알려면 int로 추적이 가능하니까 일단 먼저 (int*)로 형변환을 한다. // 그리고 22는 2번째칸에 있으므로 0..

C/포인터 2019.08.12

포인터 매개변수에 대해

int main(void) { int num; //num변수를 선언한다. int* numP = # //*numP의 주소값은 &num의 주소이다. printf("숫자 입력 : "); scanf("%d", &num); printf(" num : %d\n", num); //scanf해서 받은 num의 값을 출력한다. printf("*numP : %d\n\n", *numP); // num의 주소가 나온다. printf(" &num : %d\n", &num); // num의 주소가 나온다. printf(" numP : %d\n", numP); // numP의 주소가 나온다. 하지만 numP가 num의 주소가 같으므로 똑같은 값이 나온다. return 0; } 이것과 void result(int* x) { ..

C/포인터 2019.08.12

gets, scanf, fgets 비교

scanf() ( )안에 여러가지 format을 지정할 수 있다. #include "stdafx.h" #include int main(void) { char str[100]; printf("문자열을 입력하세요.\n"); scanf("%s", &str); printf("입력한 문자열은 %s 입니다.\n", str); return 0; } 위의 출력 결과에서 알 수 있듯이 scanf()로는 공백을 읽을 수가 없기 때문에 문자열을 입력받는 적합하지 않다. gets() 함수 - 1줄을 입력할 때는 gets( ) 함수를 사용한다. - 줄 바꿈(엔터)키를 할때까지 1줄을 그대로 읽어들인다. - 읽어들인 문자열은 줄바꿈 하는 곳에서 \0이 붙여진 배열에 저장된다. #include int main(void) { cha..

C/입출력 2019.08.05

동적 메모리 활용

동적 메모리 할당 기술은 C언어에서 고급 프로그램 개발이 이루어질 때 빠질 수 없는 부분이다. 동적 메모리에 대한 활용이 익숙해지만 메모리에 대한 이해도가 높아지고 메모리를 적절하게 사용하는 방법을 알게 된다. 따라서 동적 메모리에 대한 개념을 바르게 이해하고 이를 활용할 수 있도록 반복적으로 이를 활용해 볼 필요가 있다. #include #include //구조체의 동적 메모리 할당 struct Book { int number; char title[100]; }; void showBook(struct Book* p, int n) { int i; for (i = 0; i number, (p + i)->title); } } ..

C/기초 2019.08.02

동적 메모리

동적 메모리 할당이란 프로그램이 실행 도중에 동적으로 메모리를 할당 받는 것을 말한다. 프로그램에서는 필요한 만큼의 메모리를 시스템으로부터 할당을 받아서 사용하고, 사용이 끝나면 시스템에 메모리를 반납한다. 필요한 만큼만 할당을 받고 또 필요한 때에 사용하고 반납 메모리를 효율적으로 사용할 수 있는 것이다. 동적 메모리는 malloc()계열의 라이브러리 함수를 사용하여 할당 받아 사용할 수 있다. 동적메모리는 마치 수납 공간에서 물건을 꺼내는 것과 비슷하다. 물건의 사용이 끝나면 다시 수납 공간에 물건을 놓아햐한다. 만약 물건을 제대로 반납하지 않으면 다른 사람이 해당 물건을 사용할 수 없기 때문이다. 메모리 또한 마찬가지다. 동적 메모리의 사용이 끝나면 반드시 해당 메모리 영역을 명시적으로 반납해주어야..

C/기초 2019.08.01

파일 입출력

파일입출력은 다양한 프로그램을 개발할때 자주 사용되는 기능이다. 예를들면 파일입출력을 통하여 게임에서 현재의 데이터를 저장하고 다시 불러오거나 할 수 있다. 뿐만 아니라 프로그램 전반에 사용되는 다양한 데이터를 처리하고 저아하여 보관할 수 있다는 점에서 유용하다. 또한 보완같은곳에서도 많이 사용이된다. C언어같이 강력한 입출력 체계를 가지고있는 언어는 현재 컴퓨터에 설치되어있는 파일을 지워라 복사해라 하는 명령이 가능하기 때문에 프로그램을 잘못짜거나 악의적으로 컴퓨터 내의 프로그램을 건드릴수 있다. 매우 위험하기도하기 떄문에 양날의 검이라고 하기도한다. #ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif #include int main(void) { FILE..

C/기초 2019.08.01

구조체 활용

#include #include struct point { int x; int y; }; void comparePoint(struct point p1, struct point p2) { if (p1.x == p2.x && p1.y == p2.y) { printf("p1과 p2와 같습니다."); } } // 이렇게 함수를 사용하는것이 더 체계적이다. // 왜냐하면 point라는 구조체 하나만 비교를 할 수있는 함수이기 때문이다. int main(void) { struct point p1, p2; p1.x = 30; p1.y = 10; p2.x = 30; p2.y = 10; /* if(p1 == p2){ printf("p1과 p2는 같습니다"); } 라는 표현이 안된다. p1과 p2자체는 비교가 안되기 때문..

C/기초 2019.07.30

구조체

C언어는 기본적으로 Java나 C++과 같은 다양한 프로그래밍 언어에 비해서 개발이 까다로운 편이다. 무엇보다 객체 지향에서의 모듈들을 C에서 바르게 적용하기 어렵다는 점에 있다. 다만 C가 익숙하다면 다른 객체 지향 프로그래밍 언어로 작성한 프로그램을 그대로 C에서도 개발할 수 있을 만큼 개발자의 능력에 따라 구현된 프로그램의 기능이 전차만별일 수 있다. 신기하게도 C언어에는 객체 지향 프로그래밍에서 클래스(class)와 흡사한 개념으로 사용되는 구조체(Structure)가 있다. 구조체란 : 객체 지향 프로그래밍에서 말하는 클래스의 모체가 되는 것으로 여러 개의 자료형을 묶어서 새로운 자료형을 만들 수 있는 방법이다. 구조체는 여러 개의 데이터를 하나로 묶어서 사용할 수 있도록 하기 위해 만들어진 C..

C/기초 2019.07.30

문자열

char array[10]; 영어는 : 1개 크기(1byte) 한글은 : 2개 크기(2byte) 를 차지하게 된다. //하나의 문자열 안의 글자수 세기 int main(void) { char input[1001]; gets(input); int count = 0; while (input[count] != '\0') { count++; } printf("입력한 문자열의 길이는 %d 입니다.", count); printf("입력한 문자열은 : %s", input); return 0; } 문자열의 크기를 나타내는 방법을 구현해 봤다. 또한 입력된 문자열을 그대로 출력하는것을 해 보았다. #include #include //string length = strlen(); int main(void) { char i..

C/기초 2019.07.30