Coding/C
type 분석 연습
빠리빵
2018. 5. 27. 11:56
#includeint 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"); }