프로그래밍 언어/C
포인터 연산과 배열
bewisesh91
2021. 12. 4. 11:38
728x90
배열의 이름은 포인터 변수와 같은 기능을 하며, 첫번 째 요소의 주소값을 나타낸다. 아래와 같이 & 연산자를 사용하지 않아도
arr 이름 자체가 주소값이기 때문에, 바로 포인터에 대입이 가능하다. arr 이름은 배열의 첫번째 원소의 주소값이므로 arrPtr이
가리키고 있는 값을 출력해보면 첫번째 원소값인 10이 출력된다.
#include <stdio.h>
int main()
{
int arr[5] = {10, 20, 30, 40, 50};
int *arrPtr = arr;
// int *arrPtr = NULL;
// arrPtr = &arr;
int arr0Adress = &arr[0];
int arrAdress = &arr;
printf("%d\n", *arrPtr);
printf("%d\n", arr[0]);
printf("%d\n", arr0Adress);
printf("%d\n", arrAdress);
return 0;
}
포인터 변수도 일반 변수처럼 값이 들어가 있는 변수기 때문에 증감 연산을 할 수 있다. 전/후위 연산과 일반 덧셈, 뺄셈 등이 가능하며
곱셈, 나눗셈 연산은 불가하다. 일반 변수에서 전/후위 연산은 1씩 증가하거나 감소한다. 그러나 포인터 변수에서의 전/후위 연산은
자료형에 따라 달라진다. 아래 코드에서 int형 포인터인 arrPtr은 1을 더할 때마다 주소값이 4씩 증가하고, double 포인터인
arrPtr2는 8씩 증가한다. 즉, 포인터 변수가 N만큼 더하거나 뺄 때 자료형의 크기 x N 만큼 변한다.
#include <stdio.h>
int main()
{
int arr[5] = {10, 20, 30, 40, 50};
double arr2[5] = {10.1, 20.2, 30.3, 40.4, 50.5};
int *arrPtr = arr;
double *arrPtr2 = arr2;
printf("포인터 주소 : %d %d\n", arrPtr++, arrPtr2++);
printf("증가 연산 후 : %d %d\n", arrPtr, arrPtr2);
printf("변수 값 : %d %.2f\n", *arrPtr, *arrPtr2);
arrPtr += 2;
arrPtr2 += 2;
printf("증가 연산 후 : %d %d\n", arrPtr, arrPtr2);
printf("변수 값 : %d %.2f\n", *arrPtr, *arrPtr2);
return 0;
}