본문 바로가기

programming language/C 언어

c언어 포인터 이해.

//두 변수의 값을 서로 변환하는 포인터 함수

#include <stdio.h>
void swap(int* x, int* y)
{   
int temp;
temp = *x;
*x = *y;
*y = temp;
}

int main(void)
{
int x = 1;
int y = 2;
swap(&x, &y);
printf("x = %d\ny = % d\n", x, y);
return 0;
}

출력은 x와 y값이 바뀐채로 출력이 된다. swap(&x, &y);를 통해 void swap(int* x, int* y) 함수가 호출이 되었고

swap 함수를 통해 x가 가리키는 값과 y가 가리키는 값이 바뀌게 되면서 x y의 값이 서로 바뀌었다.

 

포인터 추가 개념이해

int x = 70;

int *y = &x; (x주소를 가리키도록 선언)가 선언되었다고 하면, 하나의 메모리 공간 안에 x가 차지하는 메모리 공간

이 할당되고,  x값으로 70이 들어간다. 

또, int *y = &x;는 메모리 공간이 할당되고 x주소를 가리킨다. 이때 y값은 위치 값(주소 값)이다. <*y 아님!>

 

*y는 y가 의미하는 주소가 <x주소 가리키도록 선언됨>, 의미하는 값을 불러오라 한다고 생각할 수 있고, 그 값은 여기서 70이다.

 또한 , x = 70이다.

여기서  y의 값은 메모리 주소 값 그 자체이다. (&x)

 

즉 x = *y이고 &x = y이다.

 

int main(void)

int i = 10;
int* p;
p = &i;
printf("i = % d\n", i);
*p = 20;    / / p가 의미하는 주소? i의 주소를 가리킴, i의 주소가 의미하는 값은? 10 임. 그 값이 20으로 변경된다.
printf("i = % d\n", i);
return 0;
}

 

동빈나 유튜브를 통해 부족한 개념을 바로 잡는 중입니다.