프로그래밍 언어/C 81

C언어 참고내용- 선행처리기(preprocessor)란?

선행 처리기(preprocessor) ●정의 컴파일러가 소스 프로그램을 기계어 코드로 번역하기 전에 일련의 작업을 수행하는 것 ●장점 프로그램의 쉬운 이해 프로그램의 수정 용이 프로그램의 간편한 이식 프로그램의 쉬운 작성 깔끔한 프로그램 처리 ●종류 선행처리기 설명 #include 외부 파일을 불러옴 #define #undef C 언어 문장으로 치환 #if #ifdef #ifndef #else #elif #endif 조건부 컴파일 #error #line #pragma 컴파일에 기타 정보 제공

C언어 30강) 포인터 연산 사용하기

참고) % p : 포인터의 주소를 출력 포인터 변수는 읽기 전용의 메모리 주소를 저장한다. 그런데 그러한 메모리 주소를 조작할 수 있는데 그것이 바로 포인터 연산이다. ●포인터 연산 코드 예제 #include int main() { int num[3] = { 1, 2, 3 }; //int 4byte int *numPtr1; int *numPtr2; int *numPtr3; numPtr1 = num; // 배열 첫 번째 요소의 메모리 주소를 포인터에 저장 numPtr2 = numPtr1 + 1; // 포인터 연산 numPtr3 = numPtr1 + 2; // 포인터 연산 printf("numPtr1에 있는 주소값: %p\n", numPtr1); // 000000000062FDF0: 메모리 주소. 컴퓨터마다..

C언어 28강) 공용체

공용체 구조체는 멤버끼리 메모리 공간을 따로 쓰는 데, 공용체는 메모리 공간을 멤버끼리 같이 쓴다는 점에서 그 차이가 있다. 위의 논리적 그림에서 보듯 공용체는 가장 큰 자료형의 메모리 공간을 공유한다. ●공용체 선언문법 union 공용체이름 { 자료형 멤버이름; }; 공용체는 구조체와 문법도 똑같고, 변수로 선언하는 것도 똑같다. 밑의 코드 예제를 보자. ●공용체 코드예제 #define _CRT_SECURE_NO_WARNINGS // strcpy 보안 경고로 인한 컴파일 에러 방지 #include #include // strcpy 함수가 선언된 헤더 파일 union Box { // 공용체 정의 short a; // 2바이트 float b; // 4바이트 char c[8]; // 8바이트 }; int m..

C언어 27강)++ &연산자로 구조체(struct)포인터에 구조체 변수 할당하기

abcdefgh123123.tistory.com/86 C언어 27강)+ 구조체의 멤버가 포인터 일 때, 구조체 포인터 변수 선언(동적메모리할당) 전 시간에 구조체 포인터에 대해 배웠다. 구조체 포인터란? '를 사용해야 한다 (*p1). name = p1 -> name ▲매번 *과 ( )를 사용하기 불편하" data-og-host="abcdefgh123123.tistory.com" data-og-source-url="htt.. abcdefgh123123.tistory.com 전 시간에선 구조체 포인터를 사용하기 전에 malloc 함수로 동적 메모리를 할당해주었다. 하지만 &연산자를 사용하면 동적 메모리를 할당하지 않고 바로 구조체 포인터에 구조체 변수를 할당할 수 있다. ●구조체 변수 할당 코드 예제 #i..

C언어 27강)+ 구조체(struct)의 멤버가 포인터 일 때, 구조체 포인터 변수 선언(동적메모리할당)

전 시간에 구조체 포인터에 대해 배웠다. 구조체 포인터란? C언어 27강) 구조체 포인터 기본 구조체 포인터 구조체를 가리키는 포인터로서 일반적인 포인터의 사용 방법이 비슷하지만, 구조체 멤버에 접근할 때는 '->'를 사용해야 한다 (*p1). name = p1 -> name ▲매번 *과 ( )를 사용하기 불편하 abcdefgh123123.tistory.com 그렇다면 구조체 포인터 변수를 선언할 때 그 구조체 안에 포인터가 있다면?? 굉장히 복잡하지 않을까? 뭔 소린지 모르겠을 것이다. 맞다 그냥 코드를 보자. d2-> c = (*d2).c 라는 점과 포인터 변수의 개념 자체를 확실히 이해하고 있어야 밑의 코드를 이해할 수 있다. ●구조체 포인터변수 선언, 구조체 안에 포인터 변수가 있는 코드 예제 #..

C언어 27강) 구조체(struct) 포인터 기본

구조체 포인터 구조체를 가리키는 포인터로서 일반적인 포인터의 사용 방법이 비슷하지만, 구조체 멤버에 접근할 때는 '->'를 사용해야 한다 (*p1). name = p1 -> name ▲매번 *과 ( )를 사용하기 불편하기 때문에 ->를 사용하는 것이다. ●malloc 함수를 이용한 구조체 포인터 사용 코드 예제 #define _CRT_SECURE_NO_WARNINGS // strcpy 보안 경고로 인한 컴파일 에러 방지 #include #include // strcpy 함수가 선언된 헤더 파일 #include // malloc, free 함수가 선언된 헤더 파일 struct sample { // 구조체 정의 char name[20]; // 구조체 멤버 1 int age; // 구조체 멤버 2 }; int..

C언어 26강) 구조체(struct) 기본개념 및 초기화

구조체의 개념 : 서로 다른 데이터 타입의 집합. (배열이 동일한 데이터 타입을 쓰는 것과는 다른 개념) : 서로 다른 데이터 타입을 처리하지 못하는 배열의 한계를 해결하고 자료를 체계적으로 관리하기 위해 등장한 개념 학번 성명 국어점수 영어점수 수학점수 20200801 홍길동 88 99 78 20200802 홍동길 89 77 18 ▲서로 다른 데이터 타입의 모음 예시 구조체, 레코드, 필드의 개념 관계 구조체는 여러 가지 종류의 데이터 타입을 묶어 통합된 변수로 생성하고, 이렇게 생성된 데이터를 레코드라고 한다. 위의 예시에서 학번, 성명, 국어 점수 등의 데이터를 필드라고 하고 필드로 구성된 데이터들을 처리하기 위해 구조체를 사용한다. ●구조체의 선언 코드 예제 struct score{ int sno..

C언어 25강-1) 문자열 비교하기 strcmp 함수

strcmp 함수: 문자열을 비교하기 위해 쓰이는 함수 ●특징 헤더 파일 안에 들어있음. ●문법 strcmp(문자열1, 문자열 2); int strcmp(const *_Str1, char const *_Str2); ●strcmp함수 코드 예제(strcmp(문자열 1, 문자열 2);) #include #include // strcmp 함수가 선언된 헤더 파일 int main() { char s1[10] = "Hi"; char *s2 = "Hi"; int ret = strcmp(s1, s2); // 두 문자열이 같은지 문자열 비교 printf("%d\n", ret); // 0: 두 문자열이 같으면 0 return 0; } s1 > s2 일 때 결괏값 1 s1 = s2 일때 결괏값 0 s1 < s2 일때 결괏..

C언어 25강) 문자열 길이 구하기 strlen함수

문자열의 길이를 구하기 위해서는 strlen 함수를 활용해야 한다. strlen 함수는 헤더파일 안에 들어있다. ●strlen함수를 활용한 문자열 길이 코드 예제 #include #include // strlen 함수가 선언된 헤더 파일 int main() { char *s1 = "Hi"; // 포인터에 문자열 Hi의 주소 저장 char s2[9] = "Hello"; // 크기가 9인 char형 배열을 선언하고 문자열 할당 printf("s1 문자열의 길이: %d\n", strlen(s1)); // 2: strlen 함수로 문자열의 길이를 구함 printf("s2 문자열의 길이: %d\n", strlen(s2)); // 5: strlen 함수로 문자열의 길이를 구함 return 0; }