Always Be Wise

포인터 연산과 배열 본문

프로그래밍 언어/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;
}

'프로그래밍 언어 > C' 카테고리의 다른 글

이중 포인터와 포인터 배열  (0) 2021.12.04
상수 포인터  (0) 2021.12.04
Call by value & Call by reference  (0) 2021.12.04
포인터란?  (0) 2021.12.04
함수란?  (0) 2021.12.04
Comments