포인터에 관한 질문

익명 사용자의 이미지

1. int *p[3]
2. int (*p)[3]
3. int *p(int);
4. int (*p)(int);

1번과 3번의 뜻은 알겠는데 3번과 4번은 가각 무엇을 뜻하는거죠?

익명 사용자의 이미지

1. int *p[3]
int* 의 배열 (요소 3개)

2. int (*p)[3]
int[3] 배열의 포인터. 즉
typedef int int3[3];
int3* p 와 등가

3. int *p(int);
int* 을 리턴하고 int 인자 한개를 갖는 함수 프로토타입

4. int (*p)(int);
int 를 리턴하고 int 인자 한개를 갖는 함수 포인터

익명 사용자의 이미지

int song(int);
int *p1(int);

main()
{
int (*p2)(int);

p2 = song;
p1(1);
p2(2);

*p1(3); <=== 1
// *p2(4); <=== 2

(*p1)(5);
(*p2)(6);

}

int song(int k)
{
printf("i am int song(int %d) function\n", k);
}

int * p1(int k)
{
printf("i am int * p1(int %d) function\n", k);
}

1, 2번은 약간 변칙이지만, 참고삼아 올렸어요.
돌려보시면 질문에 약간의 답이 되지 않을까 생각하네요.

그럼 건투를...

^________________________________________________^