[TIL] WEEK04 - C언어 keywords(2)

woo__j·2024년 4월 20일
0

TIL - Today I Learned

목록 보기
14/23

7. 배열의 개념

배열도 포인터와 유사한 개념
-> 한 가지 자료형을 연속적으로 나열하는 것

c언어는 배열 요소/변수의 값을 알아서 초기화해주지 않음
배열의 이름은 사실 배열이 저장된 메모리의 시작 주소(초기화 이후 주소 값 변경X)

8. 함수 호출 방식

  1. call by value: 값에 의한 호출 -> 함수에 인자를 넘길 때 값만 복사하여 넘김
    : 복사된 인자를 함수 내에서 값을 변경해도 호출자(외부 변수의 값)에 영향을 주지 않음
  1. call by reference: 참조에 의한 호출 -> 함수에 인자를 넘길 때 메모리 주소(reference)를 넘김
    : 함수 내에서 인자 값 변경 시, 호출자의 값도 변경
  1. call by object reference: 객체 참조에 의한 호출 -> 파이썬의 함수 호출 방식
    : 객체의 주소가 함수로 전달되어 전달된 객체를 참조해 변경 시 호출자에게 영향을 주나,
    새로운 객체를 만들 경우 영향을 주지 않음

9. 가변인자(va_start, va_end)

: 매개변수의 개수가 정해지지 않은 함수가 있을 때, 매번 함수에 들어가는 인수의 개수가 변하는 것

  • 가변인자 함수는 반드시 매개변수가 한 개 이상 있어야 함(고정인수)
  • 헤더: <stdarg.h>
  1. va_list: 가변 인자 목록, 가변 인자의 메모리 주소를 저장하는 포인터
  2. va_start: 가변 인자를 가져올 수 있도록 포인터를 설정하는 것
    • 첫 번째 인자: va_list타입으로 선언된 포인터
    • 두 번째 인자: 마지막 고정 인수
  3. va_arg: 가변 인자 포인터에서 특정 자료형 크기만큼 값을 가져올 때 사용하는 매크로
  4. va_end: 가변 인자 처리가 끝났을 때 포인터를 NULL로 초기화하는 매크로

10. 전처리 명령어(#define, #include, #typedef etc.)

  • 파일 처리: #include
  • 형태 정의: #define, #undef
  • 조건 처리: #if, #ifdef, #ifndef, #else, #elif, #endif
  • 에러 처리: #error
  • 디버깅: #line
  • 컴파일 옵션 처리: #pragma
  • #include : 원하는 파일을 읽어서 포함시키고자 할 때 사용
    • <파일명>: c언어 기본 라이브러리 포함할 때 사용
    • “파일명”: 사용자가 임의로 만든 파일을 포함할 때 사용
  • #define : 매크로 상수를 만들어 사용
    • 매크로: 일반적인 상수를 의미있는 문자로 표현해주는 것
    • ex) #define Pi 3.14f 하면 파일 내에서 3.14f를 Pi로 사용할 수 있음

11. list iteration

C++ STL 개념, PintOS에도 유사하게 쓰임… 나중에 할래 근데

12. bit 연산자

  • &, AND: 두 개의 비트가 모두 1일 때 1 반환
  • |, OR: 두 개의 비트 중 하나라도 1이면 1 반환
  • ^, XOR: 두 개의 비트가 서로 다른 경우 1 반환
  • ~, NOT: 비트를 0에서 1로, 1에서 0으로 반전 (보수연산)
  • <<: 비트를 왼쪽으로 시프트 (a << b: a의 비트 열을 b씩 왼쪽으로 이동)
  • '>>: 비트를 오른쪽으로 시프트

13. 구조체(struct)

여러 자료형을 가진 변수들을 하나로 묶어 새로운 자료형으로 사용할 수 있도록 정의하는 것

  • 선언: struct 구조체명 변수명; (배열로도 선언 가능)
  • 정의: struct 구조체명 { int scoreKOR; int scoreMAT;… }
  • 접근: 구조체 변수명.구조체 내 변수명

구조체와 포인터
구조체 포인터 변수도 일반 포인터와 같은 성질/사용법이지만 구조체 내 변수 접근 방법이 다름
일반 구조체 변수는 안의 변수에 접근할 때 ‘.’을 사용했지만, 구조체 포인터 변수는 ‘->’를 사용해 접근
ex) p->scoreKOR = 100;

구조체 변수 선언
1. 구조체를 선언하고, 구조체 변수를 바로 선언하는 방법

struct Point{
	int x;
	int y;
} P1, P2, P3; // 구조체 변수 P1,2,3 바로 선언
  1. main 함수 안에서 선언
struct Point P1, P2, P3; //main 함수 내에서 구조체 변수 P1,2,3 선언
  1. typedef 활용 - 간단하게 구조체 변수 선언
    typedef: 자료형의 별명을 만듬
    ex. typedef int JEONGSOO; -> 자료형 int의 별명 JEONGSOO, int 대신에 사용됨
    구조체에 적용하면
typedef struct{
	int x;
	int y;
} Point;

-> 이러면 struct Point 대신 Point를 사용한다는 의미

구조체 초기화
Point P1 = { 1, 2 } //x=1, y=2 데이터 값 입력
또는 Point P1; 선언 해놓고, P1.x = 1; P1.y = 2; 멤버에 접근한 뒤 값 할당도 가능

구조체 멤버 변수 접근
P1.x; 이런 식으로 ‘.’을 사용해 접근

14. union & enum

공용체(union)
구조체와 메모리 공간에 할당/접근하는 방식의 차이

  • 구조체: 선언 시 구조체를 구성하는 멤버가 각각 다른 공간의 메모리에 저장됨
  • 공용체: 선언 시 가장 큰 변수 사이즈 만큼 메모리 공간 할당, 나머지 변수들은 앞에서부터 메모리를 공유해 모든 멤버 변수가 하나의 메모리 공간을 공유한다, 즉 변수의 주소값이 동일

열거형(enum)
공용체와 구조체는 정의한 자료형에 의미를 두는 반면, 열거형은 연관있는 이름을 상수로 선언하는데 중점을 둠, 즉 상수들을 보기좋게 선언해놓기 위해 사용

  • 예를 들어 남자는 0, 여자는 1 또는 빨강은 0, 파랑은 1 이런 식으로 대응시켜주는 거
    enum color { RED, BLUE } or { RED = 0, BLUE = 1 }

0개의 댓글

관련 채용 정보