아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
되알진개미핥기57
되알진개미핥기5721.04.13

(C언어)struct 함수 주소 보는법

struct A

{

char b;

int i;

}

b랑 i 의 주소 보는 방법이 있을까요??

그리고 struct 함수와 구조체에 대해서 쉽게 설명해 주시면 감사하겠습니다!

&연산자 이용하려고했는데 어렵네요ㅜ

55글자 더 채워주세요.
답변의 개수
2개의 답변이 있어요!
  • 탈퇴한 사용자
    탈퇴한 사용자21.04.14

    괄호를 써서 &연산자를 이용하면 됩니다.

    아래 코드 참고하세요.

    #include <stdio.h> struct A { char b; int i; }; int main(int argc, const char * argv[]) { struct A a; a.b = 'c'; a.i = 12345; printf("%p : a\n", &a); printf("%p : a.b = %c\n", &(a.b), a.b); printf("%p : a.i = %d\n", &(a.i), a.i); return 0; }

    출력되어 나오는 값은 32비트/64비트 여부에 따라, 시스템에 따라, 실행하는 때마다 바뀔 수 있습니다.

    저의 경우 아래와 같은 나오는 경우가 있습니다.

    0x7ffeefbff510 : a 0x7ffeefbff510 : a.b = c 0x7ffeefbff514 : a.i = 12345

    a 의 주소와 a.b 의 주소는 같음을 알 수 있습니다.
    b가 a의 제일 처음 원소이기 때문입니다.

    이상한 것은 a.i 와 a.b 와의 간격이 1이 아닌 4임을 알 수 있습니다.

    char 의 타입은 1 byte 인데 이상할 수 있습니다.

    이것은 구조체를 만들 때 많은 시스템이 4의 배수로 정렬(align) 을 하기 때문입니다.

    하지만 컴파일 옵션에 따라 구조체 멤버 정렬(Struct Member Alignement) 여부를 지정할 수 있습니다.
    만약 Visual Studio 에서 이 옵션을 변경하려면 /Zp 옵션을 찾아보시면 됩니다.

    또는 Visual Studio, GCC 4.0 이상 이라면 아래와 같이 지시자를 사용하여 조절이 가능합니다.

    #pragma pack(push, 정렬크기) #pragma pack(pop)

    더 자세한 내용은 구조체 정렬 크기 조절하기를 참고하세요.


  • struct를 선언한 후에 값 앞에 &를 붙여주면 주소가 출력이 됩니다.

    struct 자체에도 &st로 해도 주소가 출력이 됩니다.

    char b가 먼저 선언되었기 때문에 &st와 &st.b는 같은 주소가 됩니다.

    struct A { char b; int i; }; int main(void) { A st; st.b = 1; st.i = 100; printf("struct st의 주소 %x\n", &st); printf("st.b의 주소 %x\n", &st.b); printf("st.i의 주소 %x\n", &st.i); printf("st.b의 값 %d\n", st.b); printf("st.i의 값 %d\n", st.i); return 0; }