C언어 포인터

Ohyuchan·2023년 8월 22일
0

🧑🏻‍💻 C Language

목록 보기
11/18
post-thumbnail

이번 포스팅에서는 포인터(pointer *) 메모리 주소를 저장하는 변수에 대해서 작성하려고 합니다.
우선 포인터 프로그램에서 메모리의 특정 위치를 가리키고, 이를 통해 변수나 배열, 함수 등을 조작할 수 있게 해준다.

포인터를 왜 사용하는 가
어떠한 변수이든지 Buffer를 할당받아서 사용하게 되는데, 모든 변수의 저장과 참조는 변수가 저장될 or 저장된 주소를 알아야 가능하다.
그래서 컴퓨터는 변수를 참조할 때 그 변수가 저장되어 있는 주소를 먼저 찾아내고, 그 주소가 가리키는 내용을 참조하게 된다.
이렇게 변수의 주소를 저장하거나 사용하기 위해 포인터를 사용하는 것이다.

🤔 포인터의 장점


  1. 직접 메모리 접근: 포인터를 사용하면 프로그래머가 직접 메모리 주소를 조작할 수 있습니다. 이는 일부 경우에 메모리 접근을 최적화하고 데이터 구조를 조작할 수 있는 유연성을 제공합니다.

  2. 메모리 효율성: 포인터를 이용하면 메모리를 효율적으로 관리할 수 있습니다. 특히, 큰 데이터 구조를 복사하는 대신 포인터를 통해 데이터에 접근하면 메모리 사용량을 줄일 수 있습니다.

  3. 복잡한 데이터 구조: 포인터를 사용하면 연결 리스트(linked list)와 같은 동적인 데이터 구조를 구현할 수 있습니다. 이를 통해 데이터를 효율적으로 삽입, 삭제할 수 있습니다.

  4. 함수 인자 전달: 포인터를 이용하여 함수에 데이터의 참조를 전달할 수 있습니다. 이로써 함수가 호출되었을 때 원본 데이터를 수정할 수 있으며, 복사된 데이터를 생성하는 비용을 줄일 수 있습니다.

  5. 동적 메모리 할당: 포인터는 동적으로 메모리를 할당하고 해제하는 작업을 수행하는 데 사용됩니다. 이는 프로그램의 실행 중에 필요한 메모리를 유연하게 관리할 수 있도록 도와줍니다.

  6. 배열과 문자열 조작: 배열과 문자열은 포인터와 관련된 개념입니다. 포인터를 사용하여 배열의 원소나 문자열의 문자에 접근하거나 조작할 수 있습니다.

  7. 효율적인 데이터 전달: 대용량 데이터를 복사하지 않고 포인터를 전달함으로써 함수 호출의 성능을 향상시킬 수 있습니다.

  8. 낮은 레벨 프로그래밍: 저수준의 프로그래밍 작업에 필요한 메모리 주소 조작을 수행할 수 있어, 하드웨어와 더 가까운 프로그래밍을 가능하게 합니다.

⇲ 선언 방법


//[데이터 형식]* [포인터 이름]
int *ptr; //int 타입의 변수를 가리키는 포인터는 이런 형식으로 선언할 수 있습니다.

int num = 42;

//포인터 변수는 선언한 후에는 주소 연산자 '&'를 사용하여 변수의 주소를 얻을 수 있습니다.
int *ptr = # //ptr은 num의 주소를 가리키는 포인터

Swap

void Swap(int *a,int *b);

int main(){
	int a = 10, b = 20;
    printf("<변경 전>\n");
    printf("a = %d\n",a);
    printf("b = %d\n",b);

    Swap(&a,&b);

    printf("<변경 후>\n");
    printf("a = %d\n",a);
    printf("b = %d\n",b);
}

void Swap(int *a,int *b){
    int temp = *a;
    *a = *b;
    *b = temp;
}
profile
안녕하세요

0개의 댓글