[Objective-C] 포인터

리앤·2022년 10월 10일
0

포인터란?

  • 동적 메모리 할당(dynamic memory allocation)과도 같은 기능을 더 쉽게 수행할 수 있도록 마련된 방안
  • 포인터는 다른 변수의 메모리 상의 주소를 담고있는 주소를 담고있는 변수
  • 포인터 정보 = 해당 데이터의 메모리 주소 + 메모리를 차지하는 크기
    • 이 두 정보만 있으면 데이터의 정확한 위치를 알 수 있다
      04번에서 시작하는데 길이는 3이야 -> 저장소 위치: 04-05-06

메모리 주소

  • 모든 변수는 &연산자(ampersand operator)로 접근 가능한 메모리 주소가 할당되어 있다
#import <Foundation/Foundation.h>

int main () {
   int  var1;
   char var2[10]; 

   NSLog(@"Address of var1 variable: %x\n", &var1 ); 
   /* Address of var1 variable: 9d290630 */
   
   NSLog(@"Address of var2 variable: %x\n", &var2 );
   /* Address of var2 variable: 9d290636 */
   
   return 0;
}
2013-09-13 03:18:45.727 demo[17552] Address of var1 variable: 1c0843fc
2013-09-13 03:18:45.728 demo[17552] Address of var2 variable: 1c0843f0
  • var1에 할당된 주소는 1c0843fc, var2는 1c0843f0인 걸 확인할 수 있다

 

포인터의 데이터 타입

type *pointer-variable-name;
int    *ip;    /* pointer to an integer */
double *dp;    /* pointer to a double */
float  *fp;    /* pointer to a float */
char   *ch     /* pointer to a character */
  • 포인터가 정의될 때 지정되는 데이터 타입은 포인터가 가르키게 되는 상수 혹은 변수의 데이터 타입이며, 실질적인 포인터의 타입은 메모리 주소를 나타내는 16진수로 모두 동일하다

 

포인터 사용법

  1. 포인터 변수 정의하기
  2. 포인터에 특정 변수의 메모리 주소 할당하기
  3. 포인터가 가리키는 주소에 저장된 변수를 반환하는 *연산자를 통해, 포인터에 담긴 주소로 넘어가 변수에 접근하기

예시: int 타입의 변수 NumVar의 주소를 가리키는 포인터 변수 활용하기

#import <Foundation/Foundation.h>

int main () {
   int  NumVar = 20;    /* int 데이터 타입의 변수 선언 */
   int  *ip;         /* 포인터 변수 선언 */  
   ip = &NumVar;       /* 포인터 변수에 int 변수의 주소 할당 */
	
   /* a. 변수 NumVar의 메모리 주소 출력 */
   NSLog(@"Address of NumVar variable: %x\n", &NumVar ); /* Address of var variable: 3a3002c */

   /* b. 포인터 변수 ip에 저장되어 있는 주소 출력 */
   NSLog(@"Address stored in ip variable: %x\n", ip ); /* Address stored in ip variable: 3a3002c */
   
   /* a와 b가 같은 16진수 값을 출력함 */

   /* c. 포인터로 할당된 값 접근 */
   NSLog(@"Value of *ip variable: %d\n", *ip ); /* Value of *ip variable: 20 */

   return 0;
}

 


Reference

profile
iOS 뉴비의 성장 기록

0개의 댓글