Objective C/C언어 기능2010. 7. 18. 12:57


 배열은 포인터이고 배열의 이름은 0번째 원소의 주소지를 가리킨다.

 또한 배열의 이름은 언제나 0번째 원소를 가라키는 변경불가능한 상수이다.

 ex) ary[] = {1,2,3,4,5};

ary = &ary[0];//배열의 0번째 주소지를 표현

*ary = 1; //0번째 주소지의 값을 표현

 

 반면 포인터는 언제나 주소지를 변경할 있는 변수이다.

 

    int a[5] = {1,2,3,4,5};

NSLog(@"*a=%i",*a);

int * pa;

pa = a;//또는 pa = &a[0];

NSLog(@"a[0] = %d a[1] = %d a[2] = %d a[3] = %d a[4] = %d",a[0],a[1],a[2],a[3],a[4]);

NSLog(@"pa[0] = %d pa[1] = %d pa[2] = %d pa[3] = %d pa[4] = %d",pa[0],pa[1],pa[2],pa[3],pa[4]);

int b[] = {6,7,8,9,10};

pa = b;

NSLog(@"pa[0] = %d pa[1] = %d pa[2] = %d pa[3] = %d pa[4] = %d",pa[0],pa[1],pa[2],pa[3],pa[4]);

NSLog(@"**************************************************************");

/*

**** 포인터의 연산

1) 포인터가 가리키는 값을 증가 혹은 감소시키는 연산

2) 포인터가 가리키는 대상원소를 증가 또는 감소 : 자료형의 크기만큼 증가한다.

) int 4바이트 만큼 증가

char형도 자료형의 크기만큼 1바이트 증가

double형은 8바이트 만큼 증가

*/ 

int * ptr1;

char * ptr2;

double * ptr3;

NSLog(@"ptr1번지=%d, ptr2번지=%d, ptr3번지=%d, ", ptr1, ptr2, ptr3);

//ptr1번지=0, ptr2번지=0, ptr3번지=0, : 초기값을 주지 않아 전부 0으로 보여진다.

NSLog(@"ptr1번지=%d, ptr2번지=%d, ptr3번지=%d, ", ptr1++, ptr2++, ptr3++);

//ptr1번지=0, ptr2번지=0, ptr3번지=0: 마찬가지로 초기값이 없어 0이지만 증가 값은 다르다

/*

int 4바이트 만큼 증가

char형도 자료형의 크기만큼 1바이트 증가

double형은 8바이트 만큼 증가한 것이다.

*/

//마지막에 null문자인 \0 삽입하여 원소마지막을 알림

char arry[6] = {'K','o','r','e', 'a', '\0'};

char * p_arry = arry;

NSLog(@"memory address = %x", p_arry);

NSLog(@"*p_arry = %c", *p_arry);

//K 출력 : 0번때 우너소의 값을 출력

NSLog(@"*(++p_arry) = %c", *(++p_arry));

//o 출력 : 0번째원소에서 ++ 의해 포인터는 1번째 원소를 가리킴

NSLog(@"*(++p_arry) = %c", *(++p_arry));

//r 출력 : 1번째 원소를 가리키는 ++ 에의해 2번째 원소를 가리킴

NSLog(@"*(p_arry+1) = %c", *(p_arry + 1));

//e 출력 : 2번째 원소(r) 가리키나 + 1 의해 다음 원소의 값을 출력

NSLog(@"*(p_arry+2) = %c", *(p_arry + 2));

//a 출력 : 2번째 원소(r) 가리키나 + 2 의해 4번째 원소의 값을 출력

Posted by 버터백통