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바이트의 메모리를 차지한다는 것을 의미합니다. 중요한것은 배열의 이름 ..