-
윤성우 열혈 C ppt 정리본(chapter 17 ~ chapter 30)PROGRAMMING/C++ 2023. 12. 19. 07:35
윤성우님이 네이버 카페에 올려준 C ppt도 유용한 것만 정리해보고자 한다 2탄.
강의 자료를 통으로 공유해주신 윤성우님 짱
(혹시 저작권에 문제가 있다면 수정하겠습니다!! 개인적인 공부용으로 정리함을 알려드립니당)
(1탄은 여기👉🏻)
2차원 배열이름의 포인터형
int arr[3][4]; int (*ptr)[4]; ///배열 포인터 int (*arr)[4]; ///포인터 배열 int * arr[4] = {&num1, &num2, &num3};
Func(int (*parr)[7], int column, ... ) == Func(int parr[][7], int column, ...); /// int column을 전달받아 세로의 길이를 알아야 한다.
2차원 배열의 세로길이 계산
세로길이 = sizeof(arr) / sizeof(arr[0]);
arr[i] == *(arr+i); arr[2][1] = 4; == (*(arr+2))[1] = 4; == (*(arr[2]+1) = 4; == *(*(arr+2)+1) = 4;
(어떤 표현을 제일 자주쓸까...?🙄 첫번째가 제일 익숙하긴 한데...)
함수포인터
함수이름이 곧 함수 포인터이며 반환형과 매개변수 2개로 판단한다.
int (*fptr)(int, int)
void 포인터
void *ptr;
1. 모든 주소값 저장이 가능하다.
2. *연산은 불가능하다.
main함수로의 인자 전달
int main(int argc, char *argv[] == **arg) /// argc : 메인함수에 전달되는 정보의 갯수
Data : 전역변수와 static변수 저장
Heap : malloc&free, new&delete을 통해 동적할당을 하는 메모리 영역
Stack : 지역변수
string 관련 함수
strlen : 문자열의 갯수를 세는 함수
전달된 문자열의 길이를 반환하되 널문자는 길이에 포함하지 않는다.
#include <stdio.h> #include <string.h> ///함수의 원형 ///size_t strlen(const char *s) ///예제 const char * jjo = "Eat_Apple"; char kim[20] = "Eat_Nothing"; char we[20] = "Eat_A\0_LOT"; printf("%d, %d, %d", (int)strlen(jjo), (int)strlen(kim), (int)strlen(we)) /// 9, 11, 5
strcpy : 단순복사 - 배열의 범위를 넘어서 복사가 진행될 수 있음에 유의
strncpy : 주어진 크기 만큼만 복사 - NULL문자 복사 빼먹지 않도록 주의
strcat, strncat : 문자열을 덧붙이는 함수
strcmp, strncmp : 문자열을 비교하는 함수
아스키코드는 사전편찬식으로 배열되어 있으며 A>B>C..., A>a, B>b, ...의 순서로 배열되어 있다.
구조체(Struct)
/// 두 개의 좌표를 갖는 하나의 점을 struct로 생각해보자 struct point pos = {11,12}
///구조체 포인터 struct point * pptr = &pos; (*pptr).xpos == pptr -> xpos ;
- 구조체 변수의 주소값( &pos)는 구조체 첫번째 변수의 주소값(&pos.xpos)와 동일하다.
- 구조체 변수간 대입연산의 결과로 멤버대 멤버 복사가 이뤄진다.
- 구조체 변수를 대상으로는 덧셈 및 뺄셈 연산이 불가능하다.(직접 정의해서 사용!)
구조체(struct)와 공용체(union)
공통점 : 정의 방법이 동일하다. (struct인지 union인지의 차이)
차이점 : 공용체 변수를 이루는 멤버의 시작값이 모두 동일하다. 또한 공용체는 멤버변수 중 가장 메모리가 큰 변수 하나의 공간만 할당된다.
메모리공간
만약 함수의 호출순서가 main → fct1 → fct2라면 스택 반환순서(=지역변수 소멸)는 fct2 → fct1 → main이다.
선행처리 : 컴파일러 이전의 처리
선행처리기 1. 단순한 치환의 작업 2. 선행처리기에 명령하는 문장(#으로 시작)
#define object-like macro 의 예 #define PI 3.14
#define Function-like macro의 예 #define SQUARE(x) ((x)*(x))
매크로 함수의 장점 1. 실행속도가 빠름 2. 자료형에 구애받지 않음
매크로 함수의 단점 1. 디버깅하기 쉽지 않다.
→ 1. 호출이 빈번하고 2. 작은 크기의 함수일때만 매크로 함수를 사용하는 것이 좋다.
#if ~ #endif ~ : 참인 경우 컴파일 대상으로 포함
#ifdef ~ #endif~ : 정의된 경우 컴파일 대상으로 포함
#연산자 : 문자열 내에서 매크로 매개변수 치환
#define STR(ABC) #ABC
##연산자 : 필요한 형태로 단순결합
#define STRNUM(Y, S, P) Y##S##P
헤더
상수와 구조체의 경우 헤더에 정의해야 좋은데, 이 경우 중복삽입문제가 발생할 수 있다.
→ 조건부 컴파일러를 이용해서 중복삽입문제를 해결할 수 있다.
#ifndef __STOIV2_H__ #define __STOIV2_H__ typedef struct div { int q; int r; }Div; #endif
'PROGRAMMING > C++' 카테고리의 다른 글
SwapPointer(포인터가 가리키는 대상이 서로 바뀌도록 하는 함수) 윤성우의 열혈 C++ 문제 2-1-3 (0) 2023.12.26 윤성우 열혈 C++ 프로그래밍 3장) 클래스의 기본(struct와 class, private와 public, 파일분할, 객체지향 프로그래밍) (1) 2023.12.22 윤성우 열혈 C++ 프로그래밍 2장) C언어 기반의 C++ 2(bool형 자료형, 참조자, const, new&delete) (2) 2023.12.20 윤성우 열혈 C ppt 정리본(chapter 1 ~ chapter 16) (2) 2023.12.18 윤성우 열혈 C++ 프로그래밍 1장) C언어 기반의 C++ (0) 2023.12.13