char str[] / char *str
배열과 포인터는 완전히 다르다.

배열은 char 형 변수를 저장할 수 있는 메모리 상의 공간을 대표하는 이름으로 str 을 사용하는 것
포인터는 포인터 변수인 str를 저장할 공간이 따로 있으며, 이 변수의 공간이 NULL 이든 특정한 문자의 주소를 가리키든 배열을 가리키든, 할당된 메모리 공간을 가리킬 수 있고 접근해 값을 변경할 수도 있다.
-> 동적으로 할당된 배열처럼 사용할 수도 있다.
int num = 10;
int *a = new int[num];
즉, int *p 로 선언된 포인터 변수에서
p 는 할당된 메모리 주소값을 저장할 수 있도록
메모리 공간을 할당받고, 그 공간을 대표하는 이름이다.
*p 는 그 공간에 저장되어 있는 메모리 주소값이 가리키는 값 이다.
&p 는 p가 할당받은 메모리 공간의 주소이다. p의 주소