[C] sizeof 연산자에 대해서

언어/C 2018. 12. 17. 06:27

알다시피 sizeof는 특정 타입이나 변수의 바이트 크기를 구하는 연산자다.

그리고 컴파일 타임에 수행되기때문에 성능을 먹지 않는다.
직관적인 코드를 만드는데 도움을 준다.


사용법은 다음과 같다.

ex)
sizeof(char); //반환값 1
char num;
sizeof(num); //반환값 1
sizeof num; //반환값 1, 변수에는 괄호 생략가능

반환값이 1인 이유는 당연히 char 크기가 1바이트라서다.

그리고 int 타입과 포인터 타입은 컴파일러마다 크기가 다를 수 있다.
32비트를 사용하는 컴파일러라면 둘다 4바이트가 될 것이고,
64비트 컴파일러라면 8바이트가 될 것이다.


!
그리고 가장 헷갈릴만한게 배열과 포인터에 대한 연산이다.
배열은 기본적으로 크기와 주소가 고정적인 포인터이므로 각 요소의 크기X요소 개수로 반환값이 나오지만, 포인터는 그냥 포인터 크기로 나온다.

여기서 특히 주의할 점은, 배열의 주소를 포인터에 넣더라도 그 포인터가 배열이 되는건 아니라는 말이다. 그냥 배열의 첫번째 주소값을 가지는 포인터일 뿐이다.

그러므로 32비트 기준으로 다음과 같은 코드는

int arr[10];
int ptr=arr;
printf("%d, %d",sizeof(arr),sizeof(ptr);

"40, 4" 라는 내용을 출력한다.


그리고 배열을 파라미터로 전달할 때도 마찬가지다. 그냥 포인터 타입으로 전달된다.
배열의 특성을 유지하면서 파라미터로 넘길 순 없다.

'언어 > C' 카테고리의 다른 글

[C] Q: 프로그램이 실행되자마자 꺼져요!  (0) 2018.12.30
[C] 함수 호출 규약.link  (0) 2018.12.17
[C] 쇼트 서킷으로 조건문 구현  (0) 2018.12.17
[C] 포인터란?  (0) 2018.12.17
[C] C언어 유니코드 사용법  (0) 2018.12.17

설정

트랙백

댓글