1. 파일의 개방과 종결 파일로부터 데이터를 입출력하기 위해서는 제일 먼저 파일을 열어야 합니다. 파일을 열겠다는 의미는 파일과 데이터를 주고 받을 수 있는 스트림을 생성한다는 의미입니다. C언어에서 파일을 열기 위한 함수로 fopen_s 함수를 제공합니다. Colored By Color Scripter™ 1 2 3 4 5 int main() { FILE* f; //파일포인터 변수 fopen_s(&f,"Test.txt","rt"); //fopen_s 함수 호출 } fopen_s 함수는 총 3개의 인자를 가집니다. 첫 번째 인자는 파일이 성공적으로 개방하면 리턴되는 파일 구조체의 포인터 값을 저장 할 변수가 옵니다. 두 번째로는 열고자 하는 파일의 경로가 오게 되고 프로젝트와 같은 위치에 존재한다면 파일 ..
■ 함수의 인자로 구조체 전달하기 함수 호출에 의한 구조체 변수의 전달은 크게 두 가지로 나누어 집니다. 하나는 값에 의한 전달 (Call-By-Value)이고 다른 하나는 주소 값에 의한 전달(Call-By-Reference)입니다. Colored By Color Scripter™ 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 void show(struct Data st); //Call-By-Value void swap(struct Data* st); //Call-By-Reference struct Data { int data1; int data2; }; int main() { Data st1 = { 10,20 };..
구조체의 정의 구조체란 하나 이상의 변수를 그룹 지어서 새로운 자료형을 정의하는 것을 의미합니다. 그룹 지어진 변수는 서로 다른 자료형의 변수라도 상관없고 포인터 변수나 배열도 그룹에 속할 수 있습니다. 프로그램 내에서 만약 학생에 대한 정보 (이름, 나이, 성별)를 가지기 위해서는 3개의 변수가 필요합니다. 이 세 개의 변수는 서로 독립 된 정보를 나타내는 것이 아니라, 하나의 정보를 나타내는 변수들입니다. 즉 학생의 정보' 나타내기 위해 늘 붙어 다녀야 하는 것입니다. Colored By Color Scripter™ 1 2 3 4 5 6 struct Student //Student 구조체를 정의 { char *name; //char* 타입의 구조체 멤버 int age; //int 타입의 구조체 멤버 ..
함수 포인터에 대한 이해 예를 들어 Add와 Main 두 개의 함수로 이루어진 Test.exe 프로그램을 실행을 한다고 가정을 해보겠습니다. CPU를 통해 프로그램을 수행하기 위해서는 Add와 Main으로 구성 된 Text.exe를 하드디스크에서 가져와 메인 메모리에 위치 시켜야 합니다. 그리고 함수 포인터(함수의 이름)는 메인 메모리에 위치 한 Add나 Main을 가르키고 있는 포인터가 됩니다. ■ 함수 포인터 타입 함수의 포인터 타입을 결정짓는 요소는 리턴형과 전달인자입니다. C 1 2 3 4 5 6 7 8 9 10 11 int fct1(int num1) // 반환형이 int형이며 전달 인자 int형 변수 하나 { num1++; return num1; } double fct2(double num1, ..
더블 포인터의 이해 더블 포인터도 싱글 포인터와 마찬가지로 메모리 공간의 주소를 저장하는 변수입니다. 다만, 차이가 나는 것은 포인터가 가르키는 대상입니다. 1 2 3 4 5 6 7 8 int main() { int num = 10; //int형 변수 num에 10 할당 int *pointer_num = # //싱글 포인터 선언 및 num의 주소 값 할당 int **double_pointer = &pointer_num; //더블 포인터 선언 및 pointer_num의 주소 할당 printf("%d \n",**double_pointer); //더블 포인터를 통한 num 값 접근 } 결론부터 말하면 더블 포인터는 싱글 포인터의 주소 값을 저장하기 위한 포인터라는 것입니다. 위의 코드 3번 라인에서 i..
함수의 인자로 배열 전달하기 함수의 인자로 배열을 전달하는 방법에 대해서 살펴 보겠습니다. ■ 1. 함수의 인자 전달 방식 함수에서 인자 전달의 기본 방식은 값의 복사에 의한 전달 방식입니다. 함수 호출에서 값의 복사에 의하 인자 전달 방식입니다. 메인 함수에서 num을 인자로 하여 call_Method 함수를 호출 하고 있고 call_Method 함수에서는 같은 이름의 num을 매개변수로 하여 값을 받고 있습니다. 여기서 '복사'의 의미는 단순히 '10'이라고 하는 값이 복사 된 것입니다. 즉 메인 영역의 num변수와 call_Method 함수의 num은 서로 다른 변수이며 어느 한 영역에서 값이 변경 되도 다른 영역의 num 변수에는 영향을 주지 않습니다. 문제는 배열을 통째로 복사하여 인자로 넘겨주..
■ 문자열 표현 방식의 이해 문자열을 표현하는 방식에는 크게 두 가지 방식이 있습니다. 하나는 변수로 표현하는 빙식이고, 또 다른 하나는 상수로 표현하는 방식입니다. 1 2 3 4 5 int main() { char str[6] = "Hello"; // 변수를 활용한 문자열 변수 표현 char *str2 = "Hello"; // 포인터를 활용한 문자열 상수 표현 } 첫 번째는 char형인 str이라는 이름의 배열을 선언하고, 대입 연산자 오른쪽에 선언된 문자열을 할당하고 있습니다. 따라서 str이 저장하고 있는 문자열은 변수가 됩니다. 두 번째 str2는 char형 포인터를 선언하고, 오른쪽에는 "Hello"라는 문자열을 선언합니다. 이는 포인터 str2를 이용해서 문자열 상수 "Hello"를 가리키겠다..
■ 배열의 이름 1 2 3 4 5 6 7 8 9 10 int main() { int num[5] = { 1,2,3,4,5 }; printf("%d\n", num); //배열의 이름 출력 printf("%d, %d\n", &num[0],&num[1]); //배열의 첫 번째 요소와 두 번째 요소 주소 출력 return 0; } int형 배열 num을 선언하고 첫 번째 줄에서 배열의 이름을 출력하고 두 번째 줄에서 배열의 첫 번째 요소와 두 번째 요소의 주소 값을 출력하고 있습니다. 결과를 살펴 보겠습니다. 배열의 첫 번째 요소는 13630876 이고 두 번째 요소는 13630880 입니다. 이는 int형 배열이므로 한 개의 배열 요소가 4바이트의 메모리를 차지한다는 것을 의미합니다. 중요한것은 배열의 이름 ..
포인터 포인터란 메모리의 주소 값을 저장하기 위한 변수로, 기본 자료형 변수와는 달리 메모리 공간의 주소 값을 저장하는데 사용되는 변수를 의미하는 것입니다. 포인터가 변수라는 것을 강조하기 위해 '포인터 변수'라는 표현을 많이 사용합니다. ■포인터 선언하기 123456main (void){ int *a; //a라는 이름의 int형 포인터 char *ch; //ch라는 이름의 char형 포인터 double *d; //d라는 이름의 double형 포인터} 포인터를 선언 할 때는 변수명 앞에 *연산자를 사용함으로써 선언이 가능합니다. ● int *a : int형 변수의 주소 값을 가질 수 있는 int형 포인터 ● char *ch : char형 변수의 주소 값을 가질 수 있는 char형 포인터● double *..