언어는 과-학인가요?/c언어

(c언어) 함수 호출 - 변수 값 위치 바꾸기 swap

이원자 탄소 2020. 9. 12. 13:34
728x90
#include <stdio.h>

void swap(int x, int y);

int main() {

	int a = 100, b = 200;
	swap(a, b);
	printf("a b: %d %d\n", a, b);
}

void swap(int x, int y)
{
	int temp = x;
	x = y;
	y = temp;
	printf("x y: %d %d\n", x,y);
}

변수값 두개 위치를 바꿔주고 싶을때는 또다른 임시변수를 만들어서 두 변수중 하나의 값을 임시변수에 넣은 다음 그 변수에 남은 변수를 넣고, 임시 변수를 남은 변수에 채워주면 바꿔짐. 

 

/* 뭔가 변수 수가 늘어나면 알고리즘이 하노이 탑처럼 되지 않을까 조심스럽게 추측중 (아닐수도 있음)

이생각하니까 갑자기 하노이 탑 알고리즘 만들고싶어지네 한번 연구해 봐야겠다 */ (잡소리는 주석처리)

 

암튼 이 방법을 포인트를 써서도 할 수 있다는거지

 

#include <stdio.h>

void swap(int* x, int* y);

int main() {

	int a = 100, b = 200;

	swap(&a, &b);
	printf("a b: %d %d\n", a, b);
}

void swap(int* x, int* y)
{
	int temp = *x;
	*x = *y;
	*y = temp;
	printf("x y: %d %d\n", *x,*y);
}

 

주소값을 올려서 주소 위치로 직접 찾아가서 바꾸게 만드는거임. 

콘솔값은 똑같이 나옴

 

#include <stdio.h>

int main() {

	// 포인터 변수가 가리키는 변수에 담겨진 값의 변경을 허용하지 않는 const 선언
	int num = 20;

	const int* ptr = &num; //ptr위치에 접근해서 값을 바꿔보는
	//*ptr=30; //번경불가능
	num=40; //변경가능.

	printf("%d", num);

}

 

변수값을 못바꾼다

#include <stdio.h>

int main() {

	int num1 = 20;
	int num2 = 30;

	int* const ptr = &num1;
	//ptr = &num2; //주소 변경 불가능 에러뜸
	*ptr = 40; //변경가능

	printf("num1변수값= %d\n", num1);
	printf("num2변수값= %d\n", num2);

}

 

주소를 못바꾼다

728x90