이해안됨요
배열에서 a[0]이랑 *a 이랑 왜 같아요?
익명(39.7)
2015-04-21 23:09
추천 0
댓글 10
다른 게시글
-
오늘 공부할려고 책 두권삿는데 어떰?ㅁㄴㅇ(175.118) | 15.04.21추천 0
-
그러고보면 저는 C언어 어려워할 때 [6]NoOTL(shippuden91) | 15.04.21추천 0
-
이차원배열포인터 질문잉ㅅㅇㅠ [6]익명(203.250) | 15.04.21추천 0
-
질문)bat파일을 이용 윈도우 로그를 보존을 어떻게 해야할지 모르겠어요ㅠ [1]ㅇㅅㅇ;(126.4) | 15.04.21추천 0
-
목아퍼서 컴퓨터 못하겠는데 방법좀 [2]sdd(1.177) | 15.04.21추천 0
-
컴퓨터 사ㅏ랑함 [1]FREE(kingsnal) | 15.04.21추천 0
-
C언어 개초보인데 숫자,특수문자 입력 어렵다 [1]익명(121.143) | 15.04.21추천 0
-
윤성우카페에 씨언어 스터디 모집있던데 가면 뭐하는거임? [4]익명(1.224) | 15.04.21추천 0
-
그럼시발 코딩으로 먹고살것도 아닌데 할생각이 팍팍들겠냐? 어? [5]익명(1.224) | 15.04.21추천 0
-
아주 긴~~~~~~ 문장 출력하는 방법 질문 [5]롤키(14.47) | 15.04.21추천 0
역사적인 이유인데 배열은 원래 선언만 가능하고 스칼라처럼 접근이 불가능해서 배열 이름을 쓰면(예: a) 그냥 첫번째 원소의 포인터 값이 튀어나왔다. 그래서 *a 하면 첫번째 원소의 값에 접근할 수 있어. 그리고 두번째 원소에 접근하려면 *(a + 1) 같이 하고. B언어 때는 그랬어. a[0], a[1] 같은 표현이 없었다. 나중에 C언어가 나오면서 *(a + 0), *(a + 1), *(a + 2), ...를 a[0], a[1], a[2], ...으로 인간이 좀 더 읽기 편하게 문법을 표준화해서 만든 거지. 그래서 a[0], a[1], a[2], ...는 0[a], 1[a], 2[a], ...처럼 써도 잘 된다. 내부적으로 a[n]이라고 하면 *(a + n)처럼 컴파일러가 기계적으로 변환해서
알아듣는데 덧셈은 교환 법칙이 성립하니깐.
http://shinluckyarchive.tistory.com/199
배열은 메모리의 일정한 주소를 기준으로 sequential하게 저장되어 있는데 a[0]는 그 연속된 메모리 영역의 첫 번째 칸에 들어있는 데이터를 나타내는 거고, *a는 a가 배열의 시작 주소를 나타내기 때문에 포인터로 보면 '배열의 시작 주소에 있는 데이터'를 나타내는 거기 때문에 둘 다 같은 주소에서 같은 자료형으로 데이터를 읽어오는 것으로 같은 의미가 됨
역사적인 의미는 몰랐네. 흥미로운걸 많이 알고있네
ㅅㅅㅅ 대학생임?
역사적으로 포인터라는 개념 자체가 나오게 된 게 배열 때문이지. 배열을 스칼라로, 즉 한 값처럼 처리하는 게 불가능하기 때문에 주소 단위로 접근할 수 밖에 없었고 포인터 개념을 만들게 된 거고, 그래서 포인터에 덧셈을 하면 정확하게 그 값이 주소에 더해지는 게 아니라 자료형 크기를 곱한 값만큼이 더해지는 이유도 배열이랑 연관이 있는 거임.
ㅇ // ㅇㅇ
ㅇ // B언어 파보면 C언어의 각종 개념들이 왜 그렇게 됐는지 잘 이해할 수 있다.
*a가 *(a+0) 이기 떄문