배열의 배열과 포인터의 배열

15812 단어 C포인터
마지막 게시물 에서 지식이 부족,

개인적으로 * ptmp []는 다차원 배열이라고 생각하지만 선언조차 실패합니다.

실수로 발언했습니다.
정중하게 @angel_p_57 씨로부터 실수 발언

결론에 따르면, 내 머리에서 이해할 수있는 허용량을 초과하는 사건이라고 말할 수 있습니다.
즉시 소스 코드를 노출하십시오.
처음 몇 줄: D0~D3은 일반 배열
D: 포인터의 배열
pp · hoge : 배열의 배열
boo: 이른바 더블 포인터 변수
pppp : 배열에 대한 포인터
#include <stdio.h>

int main(void){
    int D0[10] = {0};
    int D1[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
    int D2[10] = {2, 2, 99, 2, 2, 2, 2, 2, 2, 2};
    int D3[10] = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3};
    int *D[10] = {D0, D1, D2, D3};
    int pp[4][10] = {{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
                {10, 11, 12, 13, 14, 15, 16, 17, 18, 19},
                {20, 21, 22, 23, 24, 25, 26, 27, 28, 29},
                {30, 31, 32, 33, 34, 35, 36, 37, 38, 39}
                };
    int hoge[][10] = {{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
                {10, 11, 12, 13, 14, 15, 16, 17, 18, 19},
                {20, 21, 22, 23, 24, 25, 26, 27, 28, 29},
                {30, 31, 32, 33, 34, 35, 36, 37, 38, 39}
                };
    int **boo;
    int (*pppp)[10];

    printf("1.D[2][2]:[%d]\n", D[2][2] );
    printf("2.D[2][2]:[%d]\n", (*(D+2))[2] );
    printf("3.D[2][2]:[%d]\n", *((*(D+2))+2) );
    printf("4.D[2][2]:[%d]\n", *((D[2])+2) );
    printf("5.pp[2][2]:[%d]\n", pp[2][2] );
    printf("6.pp[2][2]:[%d]\n", (*(pp+2))[2] );
    printf("7.pp[2][2]:[%d]\n", *((*(pp+2))+2) );
    printf("8.pp[2][2]:[%d]\n", *((pp[2])+2) );

    boo = &D[0];
    printf("9.boo[2][2]:[%d]\n", boo[2][2] );
    printf("10.boo[2][2]:[%d]\n", *((*(boo+2))+2) );

    pppp = hoge;
    printf("11.pppp[2][2]:[%d]\n", pppp[2][2] );
    printf("12.pppp[2][2]:[%d]\n", *((*(pppp+2))+2) );

    return 0;
}

이하, 출력 결과

일단 의도 한 내용이 출력되고 있지만 억지로 출력하고 있기 때문에 전혀 이해할 수없는 orz
세상 일반적으로 1.5.9.11.의 4 종류를 2 차원 배열로 출력하고 있다고 할 수있다.
그러나 C 언어에는 다차원 배열 (2 차원 배열 이상의 배열)이 없으므로 2.3.4.6.7.8.10.12와 같은 설명 방법으로 문제없이 출력 할 수 있습니다.
그리고 11.12는 배열에 대한 포인터를 사용하여 출력합니다.
음, C 언어는 깊은 곳입니다.

※여담
당연히 여기까지 조사하면 캐스트 등을 보겠습니다. 그러나 여기에서는 건드리지 않겠습니다.

이상 orz

참고 URL



C 언어 선언, 왜 그렇게 쓰는가?
Pointer의 초 기초 학습 #2
다차원 배열 실현
문법상 다차원 배열 없음
호환되지 않는 포인터 타입으로부터의 대입
10-4. 포인터 포인터

좋은 웹페이지 즐겨찾기