포인터와 배열의 관계
배열의 이름은 주소값을 바꿀수 없는 상수형태의 포인터이다. 따라서 ,배열의 이름을 피 연산자로 하는 * 연산이 가능하다. 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 |