int *p , int(*p)의 차이점이 뭔가요

익명 사용자의 이미지

int *p , int(*p)의 차이점이 뭔가요
찾아봐도 영문 사이트 밖에없어서
반환값이 다르다고 하는데 먼말인지 이해가 안되네요 ㅜ

shint의 이미지


int main()
{
	int *a = new int;
	int(*aa) = new int;
 
	*a = 1;
	*aa = 2;
	printf("%d\n", *a);
	printf("%d\n", *aa);
	printf("%d\n", a);
	printf("%d\n", aa);
	(*a) = 1;
	(*aa) = 2;
	printf("%d\n", (*a));
	printf("%d\n", (*aa));
	printf("%d\n", (a));
	printf("%d\n", (aa));
 
	delete a;
	delete (aa);
	return 0;
}
 
1
2
12744184
12743968
1
2
12744184
12743968
Press any key to continue . . .

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

 의 이미지

int *p;int (*p);은 둘 다 완전히 유효한 문법이며, 똑같은 기능을 합니다. 둘 다 int 타입을 가리키는 포인터 p를 선언합니다.
둘 다 함수와는 그닥 관련이 없는데 반환값 얘기는 왜 나오는지 모르겠네요.

declarator에 괄호가 허용되는 이유는 아래와 같은 경우들 때문입니다.

int *p1(int); // "int를 받아 int *를 반환하는 함수" 선언
int (*p2)(int); // "int를 받아 int를 반환하는 함수"에 대한 포인터 선언
int *(p3(int)); // p1과 같음. 보통 이렇게는 안 쓰지요.

위의 예에서 보실 수 있듯 (informal하게 말하면) 선언자에서 후위로 달라붙는 ()나 []와 같은 것들이 전위의 *보다 먼저 달라붙습니다.
따라서 *를 먼저 달라붙게 해서 포인터로 만들고 싶으면 괄호를 써야만 합니다.