#include <stdio.h>
//프로토타입 선언 함수이름은 대충 main+n
int main1(void); 
int main2(void);
int main3(void);
int main4(void); 

int main(void) {
    main1();  
    main2();  
    main3();
    main4();
    return 0;   
}

//주소출력하기
int main1(void) {
    int a = 3;
    printf("%p\n\n", (void *)&a);  
    // 주소 출력은 %p, %p에게 전달되는 값은 void *타입이어야 함
    //출력결과 a의 주소값
    return 0;  
}

//void * 
int main2(void) {  
    int x = 1;
    double y = 2.0;
    void *b;  // 어떤 타입이든 가리킬 수 있는 포인터

    b = &x;  
    printf("x = %d\n", *(int *)b);  // (int *)로 변환 후 역참조, 주소(int *)b가 가지고있는 값
    //출력결과 x값

    b = &y;  
    printf("y = %.1f\n\n", *(double *)b);  // (double *)로 변환 후 역참조
    //출력결과 y값
    return 0;
}

//array의 값
int main3(void) {
    int array[3];
    printf("array의 값 %p\n\n",array); //배열의값은 &array[0]
    return 0;
}

 
//배열주소
int main4(void) {
    int array[4];
    int i = 0; // 세미콜론 추가

    for (i = 0; i < 4; i++) {  
        printf("배열주소 %p\n", &array[i]);  
    }
/*array[0], array[1],,,,의 주소를 출력한다
int값 크기만큼 주소 크기가 커진다.
061FEFC
0061FF00
0061FF04
0061FF08
*/
    return 0;  
}