네이버 지식인에 다음 코드에 대한 질문이 있었다. 오류 원인이 뭐냐고.
#include <stdio.h> |
간단해 보여서 codepad에서 돌려보니 잘되었다. 그렇다면 질문자는 왜 안된다고 했을까. VS에서는 돌려보니 안된다.
어찌저찌 코드는 아래와 같이 수정하여 돌아가게 하였다. 그런데 arr와 arr[0]의 주소 값은 같은데 왜 p=arr;는 안되는지 약간 의문이 들었다. codepad에서도 정상적인 결과가 나왔기 때문에 더 궁금했다.
지인들의 답변을 듣고 깨우침을 얻었다. 역시 나는 별로 아는게 없다. ㅠㅠ
그래서 최종적인 답변으로 아래와 같이 작성했다. 덕분에 하나 배워간다.
#include <stdio.h> |
주석된 부분은 배열과 포인터 관련 참고 하시라고 남겨 놓았습니다.
int arr[6];이라는 배열이 있을 때 p=arr라고 하면 arr자체가 arr의 시작점, 즉 배열의 첫번째 값인 arr[0]의 주소를 뜻합니다.
따라서 p=&arr[0] 이것도 가능합니다.
이차원배열 int arr[2][3];에서는 구조상 차이를 잘 살펴보셔야 합니다.
arr[0][0]은 정수(integer)형이고 arr[0]은 정수형 배열입니다. arr는 정수형 배열의 배열입니다. 따라서 정수형 포인터인 p에는 정수형 배열인 arr[0]이 대입됩니다.
p=&arr[0][0] 이것도 가능합니다. 첫번째 값의 주소이기 때문입니다.
'프로그래밍 > C' 카테고리의 다른 글
포인터에 관한 고찰 (0) | 2014.10.30 |
---|---|
assert 매크로 사용법 (0) | 2014.01.27 |
malloc & free 기본 사용법 (0) | 2013.07.23 |
typedef (0) | 2011.01.22 |
공용체와 열거체 (0) | 2011.01.19 |
구조체 (0) | 2010.10.23 |
배열과 포인터의 관계 (0) | 2010.10.09 |