달력

3

« 2025/3 »

  • 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
2012. 12. 18. 10:55

int ** vs int (*)[] 이차원배열 C언어 이야기2012. 12. 18. 10:55

int ** : 2차원 배열이라고 생각하는 사람들이 있다. but, 포인터의 포인터를 반환한다는 것을 뜻함
int (*)[] : 2차원 배열을 리턴한다는 것을 뜻함.

#include<stdio.h>

#include<stdlib.h>

#include<string.h>


int (*func(void))[4]

{


        int a[2][4] = { 1,2,3,4,5,6,7,8};


        return a;

}


int **bar(void)

{

        int a[2][4] = { 1,2,3,4,5,6,7,8};

        return a;

}


typedef int (*FOO)[4];


FOO foo(void)

{

        int a[2][4] = { 1,2,3,4,5,6,7,8};

        return a;

}


//끝이 10인 2차원 배열을 인자로 받아서, 그걸 다시 리턴하는 함수

int (*hooney(int (*a)[10], int size))[10]

{

        a[size-1][2] = 41;

        return a;

}


int main()

{

        int i=0;

        int j=0;

        int a = (i++, j--);

        int b = ({i++; j--;});


        printf("%d %d %d %d\n", a, b, i , j);


        int (*p)[4] = func();

        printf("func *(*(p+1)+2) : %d\n", p[1][2]);



        int (*var_foo)[4] = foo();

        printf("foo *(*(p+1)+2) : %d\n", var_foo[1][2]);



        int var_hooney[1][10] = {{1,2,3,4,5,6,7,8,9,10}};

        int (*ret_hooney)[10] = hooney(var_hooney, 1);


        printf("var_hooney size : %d\n", sizeof(var_hooney));

        for(i = 0 ; i < 10; i++)

        {

                printf("%d\n", ret_hooney[0][i]);

        }


        int** var_bar = bar();

        printf("bar *(*(p+1)+2) : %d\n", var_bar[1][2]);


        return 0;

}


'C언어 이야기' 카테고리의 다른 글

linux hlist 분석  (0) 2013.02.09
공유라이브러리 연습  (0) 2013.01.28
rbtree insert  (0) 2012.12.11
rb 트리  (0) 2012.12.11
구조체 배열 초기화 방법  (0) 2012.10.08
:
Posted by НooпeУ


Code Start Code End