데브허브 | DEVHUB | C 포인터 별표(*)의 함정 (C언어 설계 원칙)C 포인터 별표(*)의 함정 (C언어 설계 원칙)
- C 언어에서 별표(
*)는 변수 선언과 표현식(역참조)에서 서로 다른 역할을 수행하며, 이로 인해 초보자에게 혼란을 야기합니다. 😵💫
- 이러한 혼란의 원인은 선언 시 별표가 타입을 정의하는 용도로, 표현식에서는 역참조 연산자로 사용되기 때문입니다. ↔️
- C의 설계 원칙은 "선언은 사용법을 알려준다"는 것으로, 변수를 어떻게 사용해야 기본 타입 값을 얻을 수 있는지 선언 자체에 드러나도록 합니다. 📖
- 예를 들어,
int *p; 선언은 p를 역참조(*p)해야 int 값을 얻을 수 있음을 의미하며, 이는 p가 int를 가리키는 포인터임을 암시합니다. 💡
- 선언에 등장하는 별표는 단순히 "이 타입은 포인터다"라고 말하는 것이 아니라, 변수 이름으로부터 선언된 타입의 값을 얻기 위해 무엇을 해야 하는지를 알려주는 역할을 합니다. 🗺️
- 이러한 설계 철학 덕분에
*p와 같은 표현식은 선언이 제시한 힌트 그대로 p에서 int 값을 얻는 방법으로 일관되게 사용됩니다. 🔗
- 결론적으로, C는 선언과 동작을 완전히 분리된 기호로 만드는 대신, 선언이 변수의 사용 설명서처럼 동작하도록 하여 일관성과 연결성을 우선시했습니다. ✨