C언어 포인터와 참조값

2023. 1. 27. 19:23카테고리 없음

포인터란 주소값을 저장할 수 있는 변수입니다.

 

포인터 사용법

포인터는 다른 변수의 주소를 저장할 수 있고,

포인터에 저장된 주소를 실행도중에 변경할 수 있습니다.

아래 코드도 마찬가지인 경우입니다.

#include<stdio.h>
int main(void){
	
	int x = 100;
	int y = 200;
	
	int *p; //정수형 포인터 변수 선언 
	
	p = &x; //포인터 p에 x의 주소를 저장 
	printf("p의 값=%d \n",p);
	printf("*p의 값 =%d \n",*p);
	
	p = &y;//포인터 p에 y의 주소를 저장 
	printf("p의 값 %d",p);
	printf("*p의 값 %d",*p);
	
	return 0;
}

 

포인터를 사용하면 변수들의 주소 값을 바꿔서 출력할 수 있습니다.

주소를 저장하고 있는 특수한 변수인 포인터는 데이터의 복사를 피하고 데이터를 공유하여 작업하고자 할 때 사용합니다.

 

 

포인터는 단순히 메모리의 주소만 저장할 수 있는 것이 아니라 포인터가 가리키는 주소에서 값을 읽어오거나 변경할 수도 있습니다. 이러한 포인터의 특성 때문에 아래와 같은 일반 함수는 할 수 없는 데이터를 바꿔 출력할 수 있게 됩니다.

#include<stdio.h>


int main(void){
	
	int a = 100, b = 200;
	
	printf("swap() 호출 전 a=%d b=%d\n",a,b);
	swap(&a, &b);
	printf("swap()호출 후 a=%d b=%d",a,b);
	
	return 0; 
	
}
void swap(int *px,int *py){
	
	int tem;
	
	tmp = *px; //tmp=a;
	*px = *py; // a = b;
	*py = tmp; //b=tem;
}

swap은 변수를 교환해 주는 함수입니다.

swap함수가 있다면 그냥 변수들도 데이터를 바꿀 수 있지 않을까 싶어

아래와 같은 코드를 작성했지만 교환이 되지 않았습니다.

#include<stdio.h>
void swap(int x, int y);

int main(void){
	
	int a = 100, b = 20;
	
	printf("swap() 호출 전 a=%d b=%d\n",a,b);
	swap(a,b);
	printf("swap()호출 후 a=%d b=%d",a,b);
	
}void swap(int x, int y){
	int tmp;
	
	tmp = x;
	x = y;
	y = tmp;
}

 

 

이렇게 일반 변수로는 데이터의 값을 바꿔 출력할 수 없기에 포인터를 사용합니다.

함수에 포인터(*)를 넣으면 포인터가 함수에 접근하여 데이터를 저장합니다.