본문 바로가기
공부,일/c언어

sizeof 와 포인터 & 배열의 data type

by fromnothing1 2021. 6. 1.

sizeof 와 포인터

 

sizeof 는 배열의  크기를 return 한다. 

sizeof(point변수) - > 주소값의 크기 4byte 

#include<stdio.h>

int main()
{
	char  a[2][3][4];
	char  (*p)[3][4];

	p = a;

	// 배열로 선언 하면 sizeof 로 크기를 알 수있다.

	printf("izeof(a) :  %d\n", sizeof(a)); // char[2][3][4] = char (*)[3][4]
	printf("izeof(*a) :  %d\n", sizeof(*a)); // char[3][4] = char (*)[4]
	printf("izeof(**a) :  %d\n", sizeof(**a)); // char[4] = char (*)
	printf("izeof(***a) :  %d\n\n", sizeof(***a)); //  char

	printf("izeof(p) :  %d\n", sizeof(p)); // char (*)[3][4]
	// * 로 들어오면 배열과 똑같아진다. 
	printf("izeof(*p) :  %d\n", sizeof(*p)); // char [3][4] = char (*)[4] 
	printf("izeof(**p) :  %d\n", sizeof(**p)); //  char[4]
	printf("izeof(***p) :  %d\n", sizeof(***p)); //  


}

배열의 data type 

char  a[2][3][4]; 의 경우 a 배열의 data type 은 char[2][3][4] 이다. 

sizeof 함수에서  배열의 크기 (2*3*4)  와 데이터 타입에 따른 크기 (char =1) 의 곱으로 결정된다. 

 

위의 3차원 배열 a의 경우 

*a 의 데이터 타입은 char[3][4] 배열이 나온다.

한칸 씩 들어 간다고 생각하면 편안하다.

 

a 의 포인터를 저장 할 수 있는 포인터 변수 p 의 경우 data type 은 char (*)[3][4] 이고 ,

sizeof 함수에서 p 포인터 변수는 주소 값을 가지고 있음으로 4byte 를 return 한다. 

 

여기서 재미있는 점은 *p 의 datatype 이다. 

p* 의 datatype 은 char[3][4] 로 배열의 데이터 타입과 동일해 진다. 

따라서 sizeof(*p)의 경우 12 값을 return 하게 되는 것이다. 

 

항상 햇갈리지만 char[3][4] 의 데이터 type 은 char (*)[4] 와 동일하게 동작함으로 

 +1 연산시  4개의 char 만큰 건너 뛴다(4byte)

 

 

 

 

'공부,일 > c언어' 카테고리의 다른 글

구조체  (0) 2021.06.03
함수포인터  (0) 2021.06.02
void pointer , malloc  (0) 2021.06.01
Code 영역  (0) 2021.05.31
배열&문자열 함수  (0) 2021.05.30

댓글