c 언어 포인터 상수 = 배열의 이름??

joyway1의 이미지

제가 학습한 c 입문서에는 '배열의 이름을 포인터 상수라 부르기도 한다'라고 나와있어서 이제까지 '포인터 상수 = 배열의 이름' 으로 알고 있었는데요
인터넷 어디에서 학습의 편의를 위해 둘을 같은 개념으로 놓은거지 사실 완전히 다른 개념이다 라는 내용의 글을 보았습니다
또 다른 곳에서는 '포인터 상수'라는 개념 자체가 존재하는 개념이 아니다 라고도 하더군요
도대체 포인터 상수와 배열의 이름의 관계가 어떻게 되는지 궁금합니다.

ymir의 이미지

constant pointer 는 포인터는 수정할 수 없지만 포인터가 가리키는 데이터를 수정할 수 있습니다.

  int a, b;
  int * const p = &a;
  p = &b;   // error
  *p = 10;  // ok

array 도 마찬가지로 array 자체는 수정할 수 없지만 array 에 들어 있는 데이터를 수정할 수 있죠.
그래서 array name 이 constant pointer 와 동일한 특성을 갖고 있다고 설명합니다.
근데 그냥 array 는 array 고 pointer 는 pointer 죠.
http://c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=aryptr

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

익명 사용자의 이미지

https://namu.wiki/w/C(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%20%EC%96%B8%EC%96%B4)#s-7.2.2

무려 나무위키에도 나올 정도로 유명한(?) 주제...

포인터 상수라는 개념은 존재하지 않으며, '배열 이름'이라는 표현도 부정확합니다.

정확히는 배열->포인터 주소값이며
그 역은 성립하지 않습니다.

포인터 상수라는 개념은 배열과 포인터와의 관계에 대해 혼동하게 만들며
&, sizeof와 같은 예외상황을 제대로 해석하지 못하게 만들고
C언어의 타입시스템 전체에 대해 혼란과 오개념을 주게 됩니다.

배열 이름이라는 것도, 바람직하지 않은 표현입니다.
정확히는 모든 배열 타입에 대해 다 적용됩니다.

윗분이 말씀하신 것처럼 배열은 배열이고 포인터는 포인터입니다.
다만 배열에서 포인터로 자동 변환되는 규칙 하나가 있을 뿐입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.