objective-C에서 포인터

Java에서는 포인터를 사용하지 않는다. 하지만 Objective-C는 포인터에 많이 의존하는 편이다. 포인터는 값에 대한 레퍼런스이다. 좀 더 기술적으로 말하자면, 포인터는 메모리 상의 어떤 변수의 메모리 주소 값을 가리키는 변수이다. 컴퓨터의 메모리를 격자모양 방으로 비유해 보자. 변수는 각각의 방을 가지고 있다. 포인터는 특정 방을 가리키지만 포인터 값은 그 방의 값이 아닌 방의 주소이다. 즉, 포인터는 주소 값을 갖는 변수이다.

[그림]을 보면 격자모양 방의 n은 2행 5열에 있으며 그 값은 12이다. 즉, n의 값은 12이며 주소는 2행 5열이다. 포인터 p는 방 n의 위치, 즉 2행 5열을 가리킨다. 따라서 포인터 p의 값은 12가 아닌 2행 5열이다. 이것은 매우 중요한 차이점이다.

포인터를 표현하기 위해 *를 사용한다. 포인터는 다른 변수의 메모리 주소를 가리키며 &는 변수의 주소를 알려준다.

[Try This] 포인터 사용하기

1. Using Pointers라는 새로운 C command-line 애플리케이션을 만든다.( [File]-[New Project]를 클릭하여 나타나는 New Project 창에서 Command Line Utility 선택한 다음 Standard Tool을 클릭한다.)

2. [소스 코드 2-13]과 같이 main.c 파일을 수정한다.

3. Build And Go를 클릭하여 실행한다.[소스 코드 2-13]을 보면 avalue의 값은 10이고, pavalue는 avalue의 메모리 주소를 가리킨다. 그래서 printf는 avalue의 주소와 값을 출력하기 위해 avalue의 주소 값을 갖는 pavalue로 주소를, avalue의 값을 갖는 *pavalue로 값을 표시하였다.

[소스 코드 2-13] 포인터 프로그램

#include <stdio.h>int main (
int argc, const char * argv[]) { int avalue = 10; int *pavalue = &avalue; printf("address:%p value:%d", pavalue, *pavalue);
return 0;}

[Note] Xcode에서 실행하다 보면 아마도 다음의 주소 값과 다른 값이 나올 것이다.

address:0xbffff628 value:10

4. main 함수의 앞 2줄을 다음과 같이 수정한다.

//int avalue = 10; int avalue;

5. main 함수의 return 문 앞에 다음을 추가한다.

printf("value's actual value":%d, avalue);

6. 컴파일하고 실행한다. [소스 코드 2-14]에는 비정상 출력도 함께 있다.

[소스 코드 2-14] 실행 결과

[Session started at 2008-09-05 21:35:14 -0400.]address:0xbffff628 value:-1073744308 value's actual value:-1073744308The Debugger has exited with status 0.

아마도 예상치 못한 결과가 나왔을 것이다. 변수를 선언하는 것은 단순히 변수에 메모리 공간을 제공하는 것이지 값까지 제공하는 것이 아니다. 만약 초기화하지 않은 변수를 포인터로 가리킨다면 의도하지 않은 결과를 초래할 것이다. 변수를 사용하기 전에는 꼭 값을 넣으며 초기화해야 한다.

7. 다시 main 함수의 내용을 변경하여 avalue 값을 10으로 초기화한 뒤 Build And Go를 클릭하여 실행한다. 디버거 콘솔창에 10이 출력되는 것을 확인할 수 있다.

Follow
4.7 Star App Store Review!
Cpl.dev***uke
The Communities are great you rarely see anyone get in to an argument :)
king***ing
Love Love LOVE
Download

Select Collections