포인터와 배열의 관계


배열의 이름은 주소값을 바꿀수 없는 상수형태의 포인터이다. 따라서 ,배열의 이름을 피 연산자로 하는 * 연산이 가능하다. 1차원 배열 이름의 포인터형은 배열의 이름이 가리키는 대상을 기준으로 결정하면 된다.


ex)

int arr1 [3] ={1,2,3};

double arr2 [3] = {1.1 ,2.2 , 3.3};

printf(" %d %g ", *arr1,*arr2); // 1, 1.1 출력


포인터를 배열의 이름처럼 사용 할수있다


int arr[3]

*ptr = arr;

ptr[2] = 2;


포인터를 대상으로하는 증가및 감소연산


int * ptr1 =&num1;

double * ptr2  = &num2;

ptr1 += 1; // ptr1 의 주소값은 4바이트 증가 ( 가리키는 자료형이 int )

ptr2 += 1; // ptr2 의 주소값은 8바이트 증가 ( 가리키는 자료형이 double )

* TYPE형 포인터를 대상으로 n 크기만큼 값을 증가 감소시 n x sizeof(TYPE)의 크기만큼 주소값이 증가 및 감소한다.

이를통해 arr[i] == *(arr+i) 이다. 


두가지 형태의 문자열 표현


char str1[] = "My String"; // 배열의 길이는 자동으로 계산된다. 

이는 배열을 기반으로하는 변수 형태의 문자열 선언이다 . 변수형태이기 때문에 , 문자열의 일부를 변경할 수 있다. 하지만 str1 은 다른 주소값을 가질 수 없다.

char * str2 = "Your String"; 

이는 포인터를 기반으로하는 상수형태의 문자열이다 .따라서 그 내용의 변경이 불가능하다. 하지만 str2 는 다른주소값을 가질 수 있다.


포인터 배열


포인터 변수로 이루어져 주소값의 저장이 가능한 배열을 가리켜 포인터 배열이라고 한다.

int * arr[2] = {&num1,&num2}; // 길이가 2인 int 형 포인터 배열 arr


문자열을 저장하는 포인터 배열

char * arr[3]={"Simple","String","Array"}; // 큰따옴표로 묶여서 표현되는 문자열은 그 형태에 상관없이 메모리 공간에 저장된 후 그 주소값이 반환된다.

'C언어 > 열혈C' 카테고리의 다른 글

C : Chapter -13 다차원 배열  (0) 2018.03.23
C : Chapter -12 포인터와 함수  (0) 2018.03.22
C : Chapter-10 포인터  (0) 2018.03.22
C : Chapter-9 배열  (0) 2018.03.22
C : Chapter -8 함수  (0) 2018.03.19

+ Recent posts