티스토리 뷰

Coding/C

type 분석 연습

빠리빵 2018. 5. 27. 11:56
#include 

int main() {
	int *p = malloc(sizeof(int));
	printf("%#.8x\n", p);			// p가 가리키는 주소
	printf("%#.8x\n", p + 1);		// 4byte 증가
	printf("%#.8x\n\n", &p + 1);	// p가 저장된 주소 + 4byte

	int a[4];
	printf("%d\n", sizeof(a));		// 16
	printf("%#.8x\n", a);
	printf("%#.8x\n", a + 1);		// 4byte 증가
	printf("%#.8x\n", &a);			// a와 동일
	printf("%#.8x\n\n", &a + 1);		// 16byte 증가

	char **p2 = (char**) malloc(100 * sizeof(char*));
	printf("%#.8x\n", p2);			// type : char **
	printf("%#.8x\n", p2 + 1);		// contents type : char * -> 4byte 증가
	printf("%#.8x\n", *p2);			// type : char *
	printf("%#.8x\n", *p2 + 1);		// contents type : char -> 1byte 증가 
	printf("%#.8x\n", &p2);			// type : char ***
	printf("%#.8x\n\n", &p2 + 1);	// contents type : char ** -> 4byte 증가

	double **p3 = (double**)malloc(100 * sizeof(double));
	printf("%#.8x\n", p3);			// type : double **
	printf("%#.8x\n", p3 + 1);		// contents type : double * -> 4byte 증가
	printf("%#.8x\n", *p3);			// type : double *
	printf("%#.8x\n", *p3 + 1);		// contents type : double -> 8byte 증가 
	printf("%#.8x\n", &p3);			// type : double ***
	printf("%#.8x\n\n", &p3 + 1);	// contents type : double ** -> 4byte 증가

	int *a2[4];	// -> 주소로 쓰려면 int ** type
	printf("%d\n", sizeof(a2));			// 16
	printf("%#.8x\n", a2);				// type : int * [4] 
	printf("%#.8x\n", a2 + 1);			// contents type : int * -> 4byte 증가
	printf("%#.8x\n", a2[0]);			// type : int * 
	printf("%#.8x\n", a2[0] + 1);		// contents type : int -> 4byte 증가
	//printf("%#.8x\n", *a2[0]);		// type : int
	//printf("%#.8x\n", *a2[0] + 1);	// a2[0] 주소에 있는 값(쓰레기값) + 1
	printf("%#.8x\n", &a2);				// type : int *(*)[4] 
	printf("%#.8x\n\n", &a2+ 1);			// contents type : int *[4] -> 16byte 증가

	int(*p4)[4] = (int (*)[4])malloc(sizeof(int [4]));	// type : int(*)[4]
	printf("%d\n", sizeof(p4));			// 4 -> type :int (*) [4] -> pointer
	printf("%d\n", sizeof(*p4));		// 16 -> type : int[4]
	// (*p)[0]는 int type
	printf("%#.8x\n", p4);				// type : int (*)[4]
	printf("%#.8x\n", p4 + 1);			// contents type : int[4] -> 16byte 증가
	printf("%#.8x\n", &p4);				// type : int (*(*))[4]
	printf("%#.8x\n", &p4 + 1);			// contents type : int (*) [4] -> 4byte 증가

	system("pause");
}


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함