Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 프로그래밍의 참조와 포인터, 개념부터 예제까지 완벽 정리


문제 정의

C 프로그래밍 언어에서 참조(reference)포인터(pointer)의 개념을 예제 코드와 함께 살펴보겠습니다.

포인터(Pointer)란 무엇인가?

포인터는 다른 변수의 메모리 주소를 저장하는 특수한 변수입니다. 포인터의 주요 특징은 다음과 같습니다.

  • 변수의 메모리 주소를 저장합니다.
  • NULL 값을 가질 수 있습니다.
  • 참조에 의한 전달(pass by reference) 방식으로 접근할 수 있습니다.
  • 선언 시점에 반드시 초기화할 필요는 없습니다.

포인터 선언 문법

데이터타입 *포인터변수명;

예를 들어 int *a;라고 선언하면, a는 int 타입 변수의 주소를 담게 됩니다.

포인터에 주소 대입하기

포인터변수 = &다른변수;

&(앰퍼샌드) 연산자는 변수의 주소를 구하고, *(역참조 연산자)는 포인터가 가리키는 주소에 저장된 실제 값에 접근합니다.

참조(Reference)란 무엇인가?

참조는 이미 선언된 변수에 붙이는 다른 이름(별칭)입니다. 주요 특징은 다음과 같습니다.

  • 선언된 변수의 별칭(alternate name) 역할을 합니다.
  • 값에 의한 전달(pass by value) 방식으로 접근됩니다.
  • NULL 값을 가질 수 없습니다.

참고로 순수한 의미의 '참조'는 C++에서 지원하는 기능이며, C 언어 자체는 포인터만 제공한다는 점을 알아두면 좋습니다.

예제 코드

#include<stdio.h>
int main(){
    int a=2,b=4;
    int *p;
    printf("add of a=%d\n",&a);
    printf("add of b=%d\n",&b);
    p=&a; // p는 변수 a를 가리킴
    printf("a value is =%d\n",a); // a의 값 출력
    printf("*p value is =%d\n",*p); // a의 값 출력
    printf("p value is =%d\n",p); // a의 주소 출력
    p=&b; // p는 변수 b를 가리킴
    printf("b value is =%d\n",b); // b의 값 출력
    printf("*p value is =%d\n",*p); // b의 값 출력
    printf("p value is =%d\n",p); // b의 주소 출력
}

실행 결과

add of a=-748899512
add of b=-748899508
a value is =2
*p value is =2
p value is =-748899512
b value is =4
*p value is =4
p value is =-748899508

결과 해석

실행 결과를 보면 *p는 항상 p가 가리키는 변수의 을 출력하고, p 자체는 해당 변수의 메모리 주소를 출력합니다. 즉, p=&a; 이후에는 *p가 a의 값(2)을 반환하고, p=&b;로 재지정한 후에는 *p가 b의 값(4)을 반환합니다. 또한 주소값은 실행 환경이나 실행 시점마다 달라질 수 있다는 점도 기억해 두세요.