몽상실현개발주의

[따배씨] 10.14 2차원 배열과 포인터 본문

Language/C

[따배씨] 10.14 2차원 배열과 포인터

migrationArc 2021. 6. 6. 23:39

[따배씨] 10.14 2차원 배열과 포인터

따배씨 - 따라하며 배우는 C언어

10강 배열과 포인터

10.14 2차원 배열과 포인터

  • 이차원 배열은 이중 포인터를 사용하여 표현 가능

 

#include <stdio.h>

int main(){
    float arr2d[2][4] = {{1.0f, 2.0f, 3.0f, 4.0f}, {5.0f, 6.0f, 7.0f, 8.0f}};
    
    printf("%u\n", (unsigned)arr2d);
    // 4022334480
    printf("%u\n", (unsigned)arr2d[0]);
    // 4022334480
    printf("%u\n", (unsigned)& arr2d[0]);
    // 4022334480
    printf("\n");
    
    printf("%u\n", (unsigned)* arr2d);
    // 4022334480
    printf("%u\n", (unsigned)& arr2d[0]);
    // 4022334480
    printf("%u\n", (unsigned)& arr2d[0][0]);
    // 4022334480
    printf("%f %f\n", arr2d[0][0], **arr2d);
    // 1.000000 1.000000
    printf("\n");
    
    printf("%u\n", (unsigned) (arr2d + 1));
    // 4022334496
    printf("%u\n", (unsigned) (&arr2d[1]));
    // 4022334496
    printf("%u\n", (unsigned) (arr2d[1]));
    // 4022334496
    printf("%u\n", (unsigned) (*(arr2d + 1)));
    // 4022334496
    printf("%u\n", (unsigned) (&arr2d[0] + 1));
    // 4022334496
    printf("%u\n", (unsigned) (&arr2d[1][0]));
    // 4022334496
    printf("\n");
  
    return 0;
}

 

 

#include <stdio.h>

int main(){
    float arr2d[2][4] = {{1.0f, 2.0f, 3.0f, 4.0f}, {5.0f, 6.0f, 7.0f, 8.0f}};
    
    for (int j = 0; j < 2; ++j){
        printf("[%d] = %u, %u\n", j, (unsigned)(arr2d[j]), (unsigned) * (arr2d + j));
        
        for (int i = 0; i < 4; ++i){
            printf("[%d][%d] = %f, %f\n", j, i, arr2d[j][i], *(*(arr2d + j)+i));
            
            *(*(arr2d + j)+i) += 1.0f; // arr2d[j][i] += 1.0f;
        }
    }
    printf("\n");
  
//    [0] = 4022334480, 4022334480
//    [0][0] = 1.000000, 1.000000
//    [0][1] = 2.000000, 2.000000
//    [0][2] = 3.000000, 3.000000
//    [0][3] = 4.000000, 4.000000
//    [1] = 4022334496, 4022334496
//    [1][0] = 5.000000, 5.000000
//    [1][1] = 6.000000, 6.000000
//    [1][2] = 7.000000, 7.000000
//    [1][3] = 8.000000, 8.000000
    return 0;
}

 

 

#include <stdio.h>

int main(){
    float arr2d[2][4] = {{1.0f, 2.0f, 3.0f, 4.0f}, {5.0f, 6.0f, 7.0f, 8.0f}};
    
    float (*pa)[4]; // 길이가 4인 배열에 대한 포인터
    float* ap[2];   // 2개의 포인터를 원소로 가지는 배열
    
    printf("%zu\n", sizeof(pa));    // 8 in x64
    printf("%zu\n", sizeof(ap));    // 16 in x64
    printf("\n");
    
    pa = arr2d;
    //pa[0] = arr2d[0]; // error
    //pa[1] = arr2d[0]; // error
    
    //ap = arr2d;   // error
    ap[0] = arr2d[0];
    ap[1] = arr2d[1];
    
    printf("%u %u\n", (unsigned)pa, (unsigned)(pa + 1));
    // 4022334480 4022334496
    printf("%u %u\n", (unsigned)arr2d[0], (unsigned)arr2d[1]);
    // 4022334480 4022334496
    printf("%u %u\n", (unsigned)pa[0], (unsigned)(pa[0] + 1));
    // 4022334480 4022334496
    printf("%f\n", pa[0][0]);
    // 1.000000
    printf("%f\n", *pa[0]);
    // 1.000000
    printf("%f\n", **pa);
    // 1.000000
    printf("%f\n", pa[1][3]);
    // 8.000000
    printf("%f\n", *(*(pa + 1) + 3));
    // 8.000000
    printf("\n");
    
    printf("%u %u\n", (unsigned)ap, (unsigned)(ap + 1));
    // 4022334464 4022334472
    printf("%u %u\n", (unsigned)arr2d[0], (unsigned)arr2d[1]);
    // 4022334480 4022334496
    printf("%u %u\n", (unsigned)ap[0], (unsigned)(ap[0] + 1));
    // 4022334480 4022334484
    printf("%f\n", ap[0][0]);
    // 1.000000
    printf("%f\n", *ap[0]);
    // 1.000000
    printf("%f\n", **ap);
    // 1.000000
    printf("%f\n", pa[1][3]);
    // 8.000000
    printf("%f\n", *(*(ap + 1) + 3));
    // 8.000000
    printf("\n");
    
    return 0;
}

 

printf("%u %u\n", (unsigned)ap, (unsigned)(ap + 1));
  • ap 는 pointer 가 담기는 2차원 배열이기 때문에, 메모리 주소가 다름
    • 새로 생성된 메모리 주소

 

 

 


이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.

http://blog.naver.com/atelierjpro

 

실리콘 밸리의 프로그래머 : 네이버 블로그

안녕하세요! 홍정모 블로그에 오신 것을 환영합니다. 주로 프로그래밍 관련 메모 용도로 사용합니다. 강의 수강하시는 분들은 홍정모 연구소 카페로 오세요.

blog.naver.com

http://www.inflearn.com/course/following-c

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com

 

Comments