Hoin's security

[1주차] 알고리즘 Programmers 문제풀이 문제 1_숫자 비교하기 본문

Algorithm/Programmers

[1주차] 알고리즘 Programmers 문제풀이 문제 1_숫자 비교하기

Hoin.s 2023. 7. 6. 20:02

프로그래머스 문제풀이를 진행해본다. 이번에 사용할 언어는 C언어이다. 

먼저 변수 num1, num2가 주어졌으니 이에 대한 값을 scanf로 입력받아서 저장하도록 코드를 만들어준다.

변수를 띄어쓰기로 구분해 입력한다는 가정을 두고 입력받는 것을 띄어쓰기로 구분해서 받았다. 

코드를 실행했더니 제대로 실행되길래 제출 후 채점 버튼을 눌러줬다.

(+여기서 의문 : scanf에서 변수앞에 &를 적지 않아주었는데 왜 실행이 되었을까? -아래에 &에 대한설명을 추가해두었다.)

성공하니 기분이 좋다.

 

-&(ampersand)란?

해당 변수의 주소를 가르킨다. 

변수 a의 값이 10이라고 하면 주소는 그 값이 존재하는 위치를 뜻한다.  그 주소가 0111이라고한다면 &a 는 10이 아닌 0111을 뜻한다. 

-왜 scanf에서 사용될까?

scanf("%d", &a);

위 코드가 작동하는 방식은 값을 입력받고 그 값은 임시 저장해둔다(레지스터). 변수의 주소로 찾아가서 그 주소가 가리키는 위치에 임시저장 해둔 값을 저장한다. 임시저장(레지스터에) 해둔 값을 삭제하는 과정을 거친다. 그래서 값을 입력하려면 변수의 주소가 필요하기 때문에 &를 사용한다.

*scanf("%s",b); 는 포인터가 필요하지 않다. %s(문자열)을 사용했으므로 문자열 자체가 주소가 되기 때문에 안사용해도 괜찮다.  (변수가 포인터나 배열일때는 &안써도 된다.)

.

.

그런데 왜 int형인 %d인데 포인터 없이 실행된걸까...?