편집 기록

편집 기록
  • 프로필 tongil님의 편집
    날짜2018.02.26

    C ++ 배열과 포인터 *연산 관련 질문입니다


    #include <stdio.h>
    #include <conio.h>
    
    int main()
    {
        int a[3][5] = {
            {1, 2, 3, 4, 5},
            {6, 7, 8, 9, 10},
            {11, 12, 13, 14, 15}
        };
        printf("%d", (a + 1));
        printf("\n%d", *(a + 1));
        _getch();
    
    }
    
    위 코드에서 첫번째 printf의 결과와 두번째printf의 결과가 같게 나오는데, 
    왜 같게 나오는지 이해가 안되네요. 
    
    *(a + 1)의 의미는 "포인터 (a + 1)이 가리키고 있는 번지에 들어있는 값을 읽어라." 인데 
    그 결과(번지에 들어있는 값을 읽은 결과)가 a[1]의 번지값이었습니다. 
    즉 포인터 (a + 1)이 가리키고 있는 번지에 들어있는 값은 a[1]의 번지값이다. 
    다시 말해 (a + 1)는  'a[1]의 번지값을 가지고 있는 무언가'의 번지값을 가지고 있다는 뜻인데.... 
    말이 안되지 않나요? a의 번지에 +1을 했다는 것은 a의 번지에 4*5바이트 만큼 갔다는 뜻인데,  
    거기에 있는게 'a[1]의 번지값을 가지고 있는 무언가'의 번지값이라뇨. 
    제가 분명히 뭔가를 잘못 이해하고 있는 것 같은데, 블로그를 읽어봐도 알수가 없네요.
    (문장을 헷갈리게 써서 죄송합니다. 근데 제 의문을 표현하려면 어쩔 수 없는 것 같네요.)
    
  • 프로필 알 수 없는 사용자님의 편집
    날짜2018.02.22

    C ++ 배열과 포인터 *연산 관련 질문입니다


    #include <stdio.h>
    #include <conio.h>
    
    int main()
    {
        int a[3][5] = {
            {1, 2, 3, 4, 5},
            {6, 7, 8, 9, 10},
            {11, 12, 13, 14, 15}
        };
        printf("%d", (a + 1));
        printf("\n%d", *(a + 1));
        _getch();
    
    }
    
    위 코드에서 첫번째 printf의 결과와 두번째printf의 결과가 같게 나오는데, 
    왜 같게 나오는지 이해가 안되네요. 
    
    *(a + 1)의 의미는 "포인터 (a + 1)이 가리키고 있는 번지에 들어있는 값을 읽어라." 인데 
    그 결과(번지에 들어있는 값을 읽은 결과)가 a[1]의 번지값이었습니다. 
    즉 포인터 (a + 1)이 가리키고 있는 번지에 들어있는 값은 a[1]의 번지값이다. 
    다시 말해 (a + 1)는  'a[1]의 번지값을 가지고 있는 무언가'의 번지값을 가지고 있다는 뜻인데.... 
    말이 안되지 않나요? a의 번지에 +1을 했다는 것은 a의 번지에 4*5바이트 만큼 갔다는 뜻인데,  
    거기에 있는게 'a[1]의 번지값을 가지고 있는 무언가'의 번지값이라뇨. 
    제가 분명히 뭔가를 잘못 이해하고 있는 것 같은데, 블로그를 읽어봐도 알수가 없네요.
    (문장을 헷갈리게 써서 죄송합니다. 근데 제 의문을 표현하려면 어쩔 수 없는 것 같네요.)