포인터(`*`)는 주소값을 불러 온다고 알고 있습니다. 예를 들어 a가 100이라는 주소에 있으면, ``` int a, *pa; pa=a; printf("*pa = %d", *pa); ``` 라고 했을 때, pa에 a의 주소값을 대입하여 a의 주소값을 불러오는 거라고 알고 있는데요. 제가 이걸 배우고나서 궁금증이 들었던 건. 이게 왜 필요한지. 싶었던 것입니다. *pa를 사용해 a의 값을 불러온다. 그렇다면 ``` int a = 10; int *pa; pa = &a; ``` 라고 했을 때 pa의 값에 a의 값이 들어 있던 10을 포함시키는 거잖아요? 근데 그럴 거면 그냥 ``` int pa = 10; ``` 이라고 해도 되는데 왜 굳이 *을 쓰는 건가요? 굳이 저렇게 복잡하게 할 필요도 없이 ``` int a = 10; printf("a의 값 : %d", a); ``` 라고 하는 게 훨씬 편하지 않나요? 제가 단순히 *문에 대한 이해도를 위해 공부를 했기 때문인지 솔직히 효율성을 크게 못느끼겠습니다.. ## 요약 즉, 왜 굳이 이런 복잡한 방식의 *이라는 포인터를 사용하는 것이며, 구체적으로 쓰는 곳이 어디인지, 왜 사용하는지부터가 궁금하고, 제가 앞으로 c언어를 배우려면 이 녀석을 왜 쓰는지 알고 배우고 넘어가야 할 것 같기에 고수님들께 여쭙니다.. 부탁드립니다.
## 값의 복사: call by value 아래의 코드는 값이 복사가 됩니다. ``` // 값의 복사 - 사본생성 int a = 10; int pa = a; // a에 새로운 값을 대입 a = 100; printf("%d", pa); // 10이 출력 ``` ## 값을 공유: call by reference 아래 코드는 값이 공유 됩니다. ``` // 포인터를 통한 공유 - 원본 공유 int a = 10; int *pa = &a; // a 값을 변경 a = 500; printf("%d", *pa); // 500 ```