ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 윤성우 열혈 C ppt 정리본(chapter 1 ~ chapter 16)
    PROGRAMMING/C++ 2023. 12. 18. 07:36

    윤성우님이 네이버 카페에 올려준 C ppt도 유용한 것만 정리해보고자 한다.

    강의 자료를 통으로 공유해주신 윤성우님 짱

     

    (혹시 저작권에 문제가 있다면 수정하겠습니다!! 개인적인 공부용으로 정리함을 알려드립니당)

     

     

    https://cafe.naver.com/cstudyjava

     

    윤성우의 프로그래밍 스터디그룹 [C/... : 네이버 카페

    윤성우의 스터디 공간입니다. C와 JAVA를 공부하시는 분들은 모두 들어오세요. ^^

    cafe.naver.com

     

    후위 연산자 예시

    int num1 = 10;
    int num2 = (num1--) + 2;
    std::cout << num1 << num2
    /// 출력 결과 9 12

     

    기본 자료형의 종류와 크기

    자료형 크기 값의 표현범위(a이상 b이하)
    정수형 char 1바이트    -128 ~ +127
    short 2바이트    -32,768 ~ +32,767
       (3e04)
    int  4바이트    -2,147,483, 648 ~ +2,147,483,647
       (2e9)
    long 4바이트
    long long 8바이트    -9,223,372,036,854,775,808 ~ + 9,223,372,036,854,775,807
       (9e18)  
    실수형 float 4바이트    대략 3.4e-37 ~ 3.4e37
    double 8바이트    대략 1.7e-307  ~ 1.7e307
    long double 8바이트 이상    double 이상의 표현 범위

     

    double형 변수의 출력 서식문사 %f

    double형 변수의 입력 서식문자 %lf

     

    메모리 공간에 저장이 되어야 CPU의 연산대상이 된다.

     

    do-while과 while

    do-while은 반복조건을 반복문의 가장 마지막에 진행하기 때문에 최소한 1회는 반복영역을 실행하게 된다.

    do
    {
    	printf("Hello World! \n");
        num++;
    }while(num<3)

     

    C++ 삼항연산자 (if-else 대신 사용)

    result = (a<b) ? a : b

    1. a < b가 참인 경우 : result = a

    2. a < b가 거짓인 경우 : result = b

     

    break, continue, switch

    break문은 자신을 감싸는 반복문 하나를 빠져나간다. 

    continue문은 반복문을 빠져나가지 않는다. 다만 반복조건을 확인하러 올라갈 뿐이다. 그리고 반복조건이 여전히 참이라면 반복영역을 처음부터 다시 실행한다.

    ///switch문의 기본적인 포멧
    
    /// enum으로 숫자 대신 순서를 정해주면 코드의 가독성 UP
    enum = {Start = 1, Stop, Continue, Finish}
    
    switch(n){
    case 1:
    /// case Start:
    	~
        break; ///break문이 없으면 아래부분도 쭉 실행하게 됨
    case 2 : 
    /// case Stop:
    	~
        break;
    default:
    	~
    }

     

     

    return의 기능

    1. 값의 반환

    2. 함수의 탈출 - 아래와 같은 형태로 자주 쓰이며 특히 재귀함수에서 자주 보인다.

    if(~):
    	return;

     

    변수 특징

    - 매개변수는 지역변수의 일종이다.

    전역변수

    1. 프로그램 시작과 동시에 메모리가 할당되며 종료시까지 존재한다.

    2. Default : 0으로 초기화된다.

    3. 지역변수 이름이 전역변수 이름을 가린다.

    4. 어디서든 접근 가능하다.

     

    👉🏻  그럼에도 자주 쓰는게 좋은 게 아니다!

    전역변수의 변경이 전체 프로그래밍 변경으로 이어질 수도 있기 때문에 생각해야 할 부분이 많다!

     

     static 변수 - 전역변수 특징 + 지역변수 특징

    (전역변수 특징)

    1. 프로그램 시작과 동시에 메모리가 할당되며 종료시까지 존재한다.

    2. Default : 0으로 초기화된다.

    (지역변수 특징)

    1. 접근범위가 선언된 함수 내로 한정된다.

     

    👉🏻 static 변수 Win!!! 

    static 변수가 전역변수보다 접근 범위가 훨씬 좁기 때문에 안정적이다. 

     

    register 변수

    register int num = 3;

    register 변수는 빈번히 호출할 변수 등을 저장해 접근이 가장 빠른 리지스터에 저장한다. 

     

    배열의 길이계산

    arrlen = sizeof(arr) / sizeof(int)

     

    Null문자와  공백

      아스키 코드 비고
    Null 문자  0 char 배열의 마지막 문자
    공백 32  

     

    문자열과 문자배열의 차이(string와 char[]의 차이)

    https://powerofsummary.tistory.com/68

     

    [char형 배열과 string] 문자배열과 문자열 의 차이

    자료형 string 은 기본 자료형이 아니라 객체이다. char형 배열은 기본 자료형이다. string은 객체이기 때문에 c언어에 없다. c++부터 제공하는 클래스이다. 차이 string은 마지막에 \0을 담지 않는다. 즉

    powerofsummary.tistory.com

      자료형 마지막에 NULL문자
    저장 여부
    비고
    string 객체
    C언어에는 없고, C++에서 제공하는 클래스
    X char c[] = "app\0le"
    출력시 app까지만 출력됨
    char[] 기본 자료형 O

     

    포인터

    - type * ptr  : type형 변수의 주소값을 저장하는 포인터변수

    (포인터도 변수라고 불리는게 좀 신기..😏)

    - 잘못된 포인터 사용을 막기 위해 NULL포인터로 초기화하는 것이 안전하다.

    int * ptr = NULL;

    - 배열의 이름도 배열의 시작 주소를 의미하는 포인터로 메모리 접근이 가능한 *연산 기능이 가능하다.

    int arr[3] = {1, 2, 3};
    /// 아래 두 줄은 완전히 동일한 의미
    int * ptr = &arr[0];
    int * ptr = arr;

    - type형 포인터 변수 대상의 증가, 감소 연산시 sizeof(type)의 크기만큼 값이 증가 및 감소한다.

    arr[i] = *(arr+i)
    char str1[] = "My String"
    /// 문자배열 - 변수 성향의 문자열
    char *str2 = "Your String"
    /// 문자열의 주소값 - 상수 성향의 문자열

     

    배열의 복사

    배열을 통째로 복사하는 방법이 C에는 없다. 따라서 배열의 주소값을 전달해야 한다.

    C++에서는 strcpy를 사용하면 string 복사가 가능하다.

     

    함수 선언시 배열 포인터 

    함수를 선언할 때만 동일한 표현으로 오른쪽 방법을 추천한다.

    Func(int * param, ... ) == Fun(int param[], ...)

     

    scanf와 &

    int num;
    scanf("%d", &num);

    scanf 함수 내에서 외부에 선언된 변수 num에 접근하기 위해서는 num의 주소 값을 알아야 한다.

    char str[];
    scanf("%s", str);

    str은 배열의 이름이고, 그 자체가 주소 값이기 때문에 & 연산자를 붙이지 않는다.

     

    const와 포인터

    const int *ptr = &num;

    포인터 변수 ptr을 이용해서 ptr이 가르키는 변수에 저장된 값을 변경하는 것을 허용하지 않는다.

    그러나 num에 저장된 값 자체의 변경이 불가능한 것은 아니다.

    int * const ptr = &num;

     포인트 변수 ptr에 저장된 값을 상수화한다.

    ptr이 가르키는 대상의 변경은 허용하지 않는다. 

     

    2차원 배열과 3차원 배열

    2차원 배열 : type arr[x = 세로길이][y = 가로길이]

    3차원 배열 : type arr[z = 높이][x = 세로길이][y = 가로길이]

     

    이중포인터

    : 포인터 변수의 주소값을 저장한다. (포인터 swap함수를 만들 때 사용!)

    int * ptr = &num;
    int **dptr = &ptr;
    int arr[20] 
    /// 1차원 배열, arr = int형 포인터(int *)
    
    int *parr[20]
    /// 1차원 배열, parr = int형 이중포인터(int **)

    댓글

Designed by Tistory.