2차원 배열의 주소값에 대한 질문입니다.

조회수 1548회

#include <stdio.h>

int main()
{
    int arr[2][4];
    for (int i = 0; i < sizeof(arr)/sizeof(int); i++) {
        scanf("%d", &arr[0][0] + i); // ok
    //  scanf("%d", &arr + i); // error
    }
    printf("arr size : %d\n", sizeof(arr)/ sizeof(int));
    for (int i = 0; i < sizeof(arr) / sizeof(int); i++) {
        printf("%d ", arr[0][i]);
    }
    return 0;
}





배열에 값을 저장할 때, &arr[0][0] +i 와 &arr + i 가 결과가 다릅니다. 첫 주소 같을거라 생각했는데 말이죠. 어떻게 다른건지 궁금합니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • &arr[0][0] +i와 결과가 같은건 arr[0]+i겠지요? &arr[0][0] +i&arr + i가 다른 이유는 아래에 적어놓겠습니다.


    &arr[0][0]+i(&(arr[0][0]))+i 순으로 연산자가 적용되어, int * 타입 입니다. &arr+i(&arr)+i 순으로 연산자가 적용되어, int(*)[2][4]입니다.

    #include <stdio.h>
    
    int main()
    {
        int arr[2][4] = {{1,2,3,4},{5,6,7,8}};
        printf("%d\n", &arr[0][0]);
        printf("%d\n", &arr[0][0] + 1);
        printf("%d\n", &arr[0]] + 1);
    
    
        printf("%d\n", &arr);
        printf("%d\n", &arr + 1);
    
        return 0;
    }
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)