본문 바로가기

languages/c, c++

char와 포인터

stack heap

#include <stdio.h>  // http://tcpschool.com/c/c_pointerArray_arrayPointer 

// https://m.blog.naver.com/PostView.nhn?blogId=1stwook&logNo=30179823570&proxyReferer=https:%2F%2Fwww.google.com%2F https://m.blog.naver.com/1stwook/30179949040

int main()
{

    int B1[2] = { 0xB000, 0xB001 };

    printf("%x, %x\n\n", B1[0], B1[1]);

    int* PTR_1D = B1;

    printf("%p = %p, %x = %x, %p\n", B1, &B1, B1[0], *B1, &B1[0]);
    printf("%p = %p\n", B1 + 1, &B1[1]);
    printf("%x = %x\n", *B1, B1[0]);
    printf("%p와 %p는 다르다.\n\n\n", *(B1 + 1), &B1[1]);

    int B2[3][2] = {
      { 0xB000, 0xB001},
      { 0xB100, 0xB101 },
      { 0xB200,0xB201 }
    };

    printf("%x, %x\n", B2[0][0], B2[0][1]);
    printf("%x, %x\n", B2[1][0], B2[1][1]); // https://www.geeksforgeeks.org/pointer-array-array-pointer/
    printf("%x, %x\n", B2[2][0], B2[2][1]);


    int(*PTR_2D)[2] = B2;

    printf("%p = %p= %p = %p = %p = %p, %x = %x\n", B2, &B2, *B2, B2[0], &B2[0], &B2[0][0], B2[0][0], *B2[0]);
    printf("%p = %p\n", B2 + 1, &B2[1]);
    printf("%p = %p, %x\n", *B2, B2[0], B2[0][0]);
    printf("%p = %p, %p\n", *(B2 + 1), &B2[1], &B2[1][0]);


    int B4[2][2][3][2];

    for (int i = 0; i < 2; ++i) {
        for (int j = 0; j < 2; ++j) {
            for (int k = 0; k < 3; ++k) {
                for (int l = 0; l < 2; ++l) {
                }
            }
        }
    }

    printf("%p = %p= %p = %p = %p = %p, %x = %x\n", B4, &B4, *B4, B4[0], &B4[0], &B4[0][0], B4[0][0], *B4[0]);
    printf("%p = %p= %p = %p = %p = %p, %x = %x\n", B4[0], &B4[0], *B4[0], B4[0][0], &B4[0][0], &B4[0][0][0], B4[0][0][0], *B4[0][0]);
    printf("%p = %p= %p = %p = %p = %p, %x = %x\n", B4[1], &B4[1], *B4[1], B4[1][0], &B4[1][0], &B4[1][0][0], B4[1][0][0], *B4[1][0]);


    return 0;
}
#include <stdio.h>
#include <stdlib.h> //https://www.geeksforgeeks.org/dynamically-allocate-2d-array-c/

    int main()
    {
        int r = 3, c = 4;
        int* arr = (int*)malloc(r * c * sizeof(int));

        *(arr + 0) = 12;
        *(arr + 1) = 11;
        *(arr + 2) = 10;
        *(arr + 3) = 9;
        *(arr + 4) = 8;
        *(arr + 5) = 7;
        *(arr + 6) = 6;
        *(arr + 7) = 5;
        *(arr + 8) = 4;
        *(arr + 9) = 3;
        *(arr + 10) = 2;
        *(arr + 11) = 1;


        printf("%p, %p, %d \n", &arr, arr, *arr);
        printf("          %p, %d \n", (arr+0),  *(arr+0)); //&(arr+0)는 에러

        printf("==========\n\n");

        int i, j, count = 0;

        for (i = 0; i < r; i++)
            for (j = 0; j < c; j++)
                printf("% d의 주소는 %p \n", *(arr + i * c + j), (arr + i * c + j));

        printf("==========\n");

        for (i = 0; i < r; i++)
            for (j = 0; j < c; j++)
                *(arr + i * c + j) = ++count;

        for (i = 0; i < r; i++)
            for (j = 0; j < c; j++)
                printf("% d의 주소는 %p \n", *(arr + i * c + j), (arr + i * c + j));
        printf("%p, %p, %d \n", arr, &arr, *arr);

        return 0;
    }

FREE

'languages > c, c++' 카테고리의 다른 글

6  (0) 2021.04.26
5  (0) 2021.04.26
4  (0) 2021.04.26
(학습 노트) 배열과 포인터  (0) 2021.04.26
(학습 노트) C언어 포인터 (참조자, 포인터 기본개념), pass by value, pass by pointer, pass by reference in Korean  (0) 2021.04.26