본문 바로가기

카테고리 없음

C언어

C를 쓰는 곳으로 이직해서 c 언어를 공부하게됐다.

그래서 c 에 대해서 정리해보려고 한다.

1. 프로그래밍 패러다임

  • C언어:
    • 절차지향 언어로, 프로그램이 순차적인 명령어의 흐름에 따라 실행된다.
    • 객체지향 개념이 없으며, 함수와 데이터가 분리되어 있다.

 

2. 메모리 관리

  • C언어:
    • 메모리 관리를 프로그래머가 직접 수행해야 한다.
    • 동적 메모리 할당(malloc, calloc)과 해제(free)를 통해 메모리를 제어.
    • 스택(stack)과 힙(heap)을 직접 다룬다.
    • 메모리 누수나 잘못된 접근(세그멘테이션 오류)이 빈번히 발생할 수 있음.C 언어 기초 학습 정리
      1. 구조체(Structure)
    • 기본 구조와 선언 방법



C 언어 기초 학습 정리

1. 구조체(Structure)

기본 구조와 선언 방법

typedef struct {
    char name[50];  // 문자열 배열 멤버
    int age;        // 정수형 멤버
} User;

 

 

  • 구조체는 서로 다른 데이터 타입을 하나로 묶어서 관리
  • Java의 클래스와 비슷하지만, 메서드는 포함할 수 없음

2. 포인터와 메모리 연산자

주요 연산자

  • * (포인터): 메모리 주소를 저장하는 변수
  • & (주소): 변수의 메모리 주소를 가져옴
  • -> (화살표): 포인터로 구조체 멤버 접근

User user;               // 일반 구조체 변수
User *userPtr = &user;   // 구조체의 주소를 포인터에 저장
userPtr->age = 25;       // 포인터로 멤버 접근

일반 구조체 변수에 접근 → . 사용:

User user;
user.age = 25;  // 일반 변수에 접근

 

 

3. 동적 메모리 관리

malloc과 free

// 메모리 할당
User *user = (User *)malloc(sizeof(User));

// 메모리 사용
user->age = 25;

// 메모리 해제
free(user);

4. 차이점 정리

상황포인터 저장이 필요한 경우포인터 저장이 필요 없는 경우

     
동적 메모리 사용 malloc으로 동적 메모리를 생성하지 않는 경우: malloc으로 동적 메모리를 생성한 경우:
  기존 구조체 주소를 수동으로 포인터에 저장해야 함: malloc 자체가 주소를 반환하므로 따로 주소 저장이 필요 없음:
예제 ```c ```c
  User existingUser; User *user = (User *)malloc(sizeof(User));
  User *userPtr = &existingUser;  
     



4. 문자열 처리

문자열 복사 함수

strncpy(user->name, name, sizeof(user->name));

 

  • strncpy: 안전한 문자열 복사
  • sizeof: 배열/변수의 크기 확인
  • 문자열 끝에 '\0' (널 문자) 필요

5. 출력 형식 지정자

printf 사용법

printf("Name: %s\n", getName(user));    // 문자열 출력
printf("Age: %d\n", getAge(user));      // 정수 출력

주요 형식 지정자

지정자용도예시

%s 문자열 "Hello"
%d 정수 42
%c 문자 'A'
%f 실수 3.14



6. main 함수 반환값

올바른 main 함수 선언

int main() {
    // 프로그램 코드
    return 0;  // 정상 종료
}

 

  • 반드시 int 타입으로 선언
  • return 0: 정상 종료
  • 다른 값: 에러 코드

주의사항

  • void main()은 표준이 아님
  • 운영체제에 프로그램 종료 상태를 알리기 위해 int 사용


7. 데이터 타입

C 언어에서 자주 사용하는 기본 데이터 타입크기를 정리해보세요:

타입설명크기(일반적으로)

char 문자형 (1바이트) 1 byte
int 정수형 4 bytes
float 단정밀도 실수형 4 bytes
double 배정밀도 실수형 8 bytes
void 반환값이 없거나 자료형 없음 -