JINTBEAT Design Life

C언어 - 함수와 포인터에 대한 이해 본문

🖥️ - C language

C언어 - 함수와 포인터에 대한 이해

jintbeat_design 2025. 5. 18. 00:53
반응형

 

 

* lu는 일반적인 C 언어나 다른 프로그래밍 언어에서 **정식 자료형(type)**이 아닙니다.
하지만 "lu"는 **출력 포맷 지정자(format specifier)**로 자주 등장하며, 특히 printf 같은 함수에서 사용됩니다.

 

📌 "lu"가 의미하는 것 (%lu)

  • "lu"는 printf에서 **형식 지정자(format specifier)**로 쓰입니다.
  • 구체적으로는:

printf("%lu", variable);

 

여기서 %lu는:

  • l  long 또는 long unsigned의 줄임
  • u → unsigned (부호 없는 정수)

즉,
👉 %lu는 unsigned long 타입의 값을 출력하라는 의미입니다.

 

🔍 참고로 자주 쓰이는 관련 포맷들

포맷의미
%d int (signed)
%u unsigned int
%ld long int
%lu unsigned long int
%lld long long int
%llu unsigned long long int

 

결론

  • lu는 자료형이 아니라, 포맷 문자열 %lu의 일부입니다.
  • %lu는 unsigned long 타입의 값을 출력할 때 사용됩니다.

 

sizeof는 C 언어에서 **데이터 타입 또는 변수의 크기(바이트 단위)**를 계산해주는 컴파일 타임 연산자입니다.
함수처럼 보일 수 있지만 함수가 아니라 연산자입니다.

 

✅ 기본 문법

sizeof(expression)      // 괄호 O
sizeof type                   // 괄호 생략 가능 (단, type인 경우만)
 
 
  • sizeof(변수)
  • sizeof(자료형)
  • sizeof 배열
  • sizeof 포인터
  • sizeof(struct) 

📌 반환값

  • sizeof는 size_t형의 값을 반환합니다.
    • typedef unsigned long size_t; (플랫폼에 따라 다름)
  • 즉, 0보다 크고 부호 없는 정수형입니다.

 

✅ 마무리 요약

항목설명
역할 변수나 타입의 크기를 구함
반환값 size_t (부호 없는 정수형)
계산 시점 컴파일 타임
함수? ❌ 함수 아님 → 연산자임
주의 배열과 포인터는 구분해야 함

 

 

함수를 통해 배열에 접근하려면, 배열의 시작주소를 포인터로 전달하면 된다.

 

 

int param[]과 int *param은 완전히 동일한 선언이다. 일반적으로 배열의 주소 값이 인자로 전달될 때에는 int param[] 형태의 선언을 주로 많이 사용한다. 

 

main 함수의 int *ptr = arr을 int ptr[] = arr로 대체는 불가능하다.

 

참고) 배열의 주소 값을 인자로 전달받는 매개변수는 포인터 변수이기 때문에 이를 대상으로 sizeof 연산을 할 경우 배열의 크기가 반환되지 않고 포인터 변수의 크기가 반환된다. 이렇듯 함수 내에서는 인자로 전달된 배열의 길이를 계산할 수가 없기 때문에 배열의 크기나 길이 정보도 함께 인자로 전달해야 한다.

반응형