함수포인터에 관해서...

pebiman의 이미지

아래와 같이 했을때 함수포인터는 입력이 됩니다.

typedef struct _tag
{
     void *p_function
}tag;

void *function()
{
   return NULL;
}
int main()
{
     tag p_tag;
     p_tag.p_function = function;  // 이렇게 하면 , p_tag에 function()의 포인터가 들어갑니다.
     tag *p_tag; 
     p_tag->p_function = function ; //이렇게 하면 에러나 나는 이유가 무엇인지요?
     
}
mach337의 이미지

pebiman wrote:
아래와 같이 했을때 함수포인터는 입력이 됩니다.
typedef struct _tag
{
     void *p_function
}tag;

void *function()
{
   return NULL;
}
int main()
{
     tag p_tag;
     tag *p_tag;

      p_tag.p_function = function;  // 이렇게 하면 , p_tag에 function()의 포인터가 들어갑니다.

     p_tag->p_function = function ; //이렇게 하면 에러나 나는 이유가 무엇인지요?
     
}

위 소스는 다음처럼 이해하겠습니다.

#include <stdio.h>
#include <stdlib.h>

typedef struct _tag
{
void * (*p_function)(void);
} tag;

void * function (void)
{
    return NULL;
}

int
main ()
{
    tag v_tag;
    tag *p_tag;

    v_tag.p_function = function;
    p_tag->p_function = function;

    return 0;
}

여기서 p_tag 는 어떤값을 가지는 것인지요..? 즉 *p_tar 가 포인터로서 초기화가
안되었다는 것입니다. 이것은 프로그래밍 QnA 에 포인터에 관련된 질문으로 자주 올라왔던 주제입니다.
pebiman의 이미지

^^;

쓰레기는 쓰레기통에...

alwaysrainy의 이미지

malloc 이 빠졌네요 ^^;

---------------------------------------
세계는 넓고, 할일은 많다.