본문 바로가기
정보처리기사/실기

코딩 - C언어(포인터, 구조체, 사용자 정의 함수, 형변환)

by Anonymouszero 2025. 7. 16.
반응형

1. 포인터

> 포인터
 - 주소를 가리킴
 - 변수는 메모리에 담기기 때문에 해당 변수가 위치한 메모리의 주소를 의미
 - 기호
  1) * : 주소를 담은(을) 장소를 의미 = 저장된 값인 주소를 불러오는 것 
  2) & : 값이 담긴 장소의 주소를 의미
 - 배열의 경우 호출 시 배열의 첫 번째 인수를 호출하는 것이기 때문에 기호가 없어도 포인터처럼 사용 가능

int a[n];
printf("%d", *a+4);
/************************
*a = a 배열의 첫번째 인수 주소
a[0] + 4 의미
************************/

printf("%d", *(a+1));
/************************
*(a+1) = 두 번째 요소의 주소(&a[1])
a[1] 의미
************************/


 - 이중 포인터
  : 포인터에 다시 다른 포인터의 주소를 담은 것

 - 필자의 팁) 아래와 같이 그림을 그려서 보기

2. 구조체

> 구조체
 : 여러 개의 다른 타입 변수(자료)를 묶어서 새로운 타입을 정의
 : 하지만 메소드는 불가능(Class는 메소드까지 포함 가능 / 캡슐화)

항목 C : strut Java, Python : class
데이터 변수만 저장 가능 변수 + 함수(메서드) 저장 가능
캡슐화 없음 있음
상속 불가능 가능
기본 접근제한자 public private


> 구조체 정의 : 자료형을 하나 만드는 것

struct 구조체명 {
	자료형 변수;
    자료형 변수;
}


> 구조체 변수 선언 : 정의한 구조체에 대한 변수 선언

struct 구조체명 변수명;
struct 구조체명 *구조체포인터 변수명;


> 구조체 멤버 지정
 - 점 연산자('.') : 구조체 변수를 이용해 멤버를 지정할 경우
  : 구조체변수명.멤버변수명 = 값;
 - 화살표 연산자('->') : 구조체 포인터 변수를 이용해 멤버를 지정할 경우
  : 구조체 포인터변수명->멤버변수명 = 값;
 - 포인터 연산자('*') : 구조체 포인터 변수, 구조체 변수 모두 사용 가능, 괄호 필수
  : (*구조체 포인터 변수명).멤버변수명 = 값;
  : 괄호 필수 > . 연산자의 우선 순위가 높아 괄호를 안 할 경우 잘못된 값을 찾음

3. 사용자 정의 함수

- C언어의 경우 상단에 함수를 정의해야함
- 만약, 하단에 정의하는 경우 상단에 선언 필수
- 선언 형태 : 자료형 함수명(자료형 매개변수, ...);
- return의 유무
 1) 함수의 자료형이 void 인 경우
   - return 필요 없음
   - void 자료형의 경우 반환 값이 없음을 의미 = 반환(return) 값(value)가 없으니 return문을 작성하지 않음
   - return;을 통해 강제 종료는 가능함
  2) 함수의 자료형이 void 제외한 형태인 경우
   - return 필수
   - return 하는 값은 함수의 자료형과 동일한 자료형을 지니고 있어야 함

4. 형변환(Type Casting)

> 자동 형변환 = 암묵적 형변환
 - 자료형의 불일치로 인해 발생
 - 데이터의 손실이 적은 방향으로 자동 진행(좌측 방향으로 형변환 발생)
  : long double > double > float > long long > long > int
> 강제 형변환 = 명시적 형변환
 - 개발자가 강제로 형을 변환시키는 것
 - (자료형)변수명 

반응형