728x90
반응형
- 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include<stdio.h>
int main(void )
{
int num1 = 10;
int num2 = 20;
int num3 = 30;
int num4[3] = { 10,20,30 };
printf( "int = %d byte\n", (int )sizeof( int));
printf( "&num1 = %d, &num2 = %d, &num3 = %d\n" , &num1, &num2, &num3);
printf( "num4[0] = %d, num4[1] = %d, num4[2] = %d\n" , &num4[0], &num4[1], &num4[2]);
}
|
cs |
- 출력
- 자료형의 크기에 대해 얕게 배운 사람이라면, 위의 코드를 보고 출력값을 본 뒤 아래와 같은 의문을 가졌을 것이다.
- " 정수형(int)는 4byte이기 때문에 num4[3] 배열은 4byte씩 차이가 나는 반면, num1, num2, num3는 왜 12 byte씩 차이가 나지?"
- 여기서 문제는 차례대로 쓴 것을 '크기'라고 믿는다는 것이다.
- 배열의 경우 차례대로 나열되어 있기 때문에 자료형의 크기만큼 차이가 난다.
- 하지만 위의 결과처럼 num1, num2, num3는 순서만 차례대로일뿐, 자료형의 크기만큼 나열되지 않는다.
- 크기를 정하는것은 코드의 나열방식이 컴퓨터의 시스템이기 때문이다.
- 컴퓨터가 12 byte를 부여해 12byte씩 차이가 날 수도 있고, 8byte를 부여해 8byte씩 차이가 날 수도 있다는 것이다.
- 정리하면, 자료형의 크기가 각각 일정하고, 배열과 같이 차례대로 나열되는 경우가 아니라면 컴퓨터가 부여하는 임의의값의 크기대로 나열된다.
728x90
반응형
'Study > C언어' 카테고리의 다른 글
C언어 - sacnf의 &(주소연산자) (0) | 2018.12.17 |
---|---|
C언어 - int로 선언한 변수에 입력한 값을 char로 출력 할 경우 오류가 나는 이유. (0) | 2018.12.17 |
C언어 - 배열과 스택, 버퍼 오버플로우 (0) | 2018.12.17 |
C언어 - scanf_s의 사용법과 예제 (0) | 2018.12.13 |
C언어 - const의 포인터 이용 (0) | 2018.12.10 |
댓글