다시 오신 걸 환영해요 이번 강의에서는 이전 과제의
데모를 보여드릴 텐데요 참조에
따른 패스 이해와 함수 안에 변수를
두고 포인터를 취하는 거죠
새 프로젝트를 생성하죠 이걸 참조에 따른 포인터
패스라고 하죠 그걸 시연하고 있으니까요 기본적인
거죠 새 프로젝트, 콘솔 응용 프로그램
c 아주 간단해요
이걸 포인터 밑줄 참조 패스라고
하죠
함수 안에서 데이터 전달에 매개 변수를 사용하는 방법과
데이터가 함수 밖에서 어떻게 수정되는지
보여드리고 있어요
가장 먼저 할 일은 함수 선언을 만드는 겁니다 함수 프로토타입이요
이렇게
하면 프로그램 어디에나 전화를 걸 수 있어요 그냥 Square라고 부를게요
이 함수 선언에서 중요한 건 포인터를 취한다는 거죠
끝 포인터를 취하는 거죠 int *라고 입력한 다음
원하는 이름을 붙이고 세미콜론으로 끝맺어요
주요 함수에서 가장 먼저
할 것은 정수 변수를 생성하는 겁니다 int
num이라고 하고 하드 코드 9로 하라고 하죠
이제 정사각형 함수를 호출할 거예요
정사각형 함수는 데이터를 반환하지 않아요 무효가 되죠
이제 주소를 전달해야 해요 4번째 줄의 제곱 함수가 포인터를 받거든요
num을 전달할 수 없어요 num의 주소를 전달하고
세미콜론으로 끝내야 하죠 함수 이름을 이용해 함수를
호출하고 변수의 주소를 전달하죠
8번째 줄에 있는 변수는 포인터가 아니거든요
그런 다음 num 값을 출력할 수 있어요
여기서 알 수 있는 건 주소를 전달하고 있기 때문에
해당 변수에 대한 함수 자체의 데이터를 변경하면 그 밖에서도
변경될 거예요 주어진 숫자의 제곱은
%d라고 하죠 라인 피드를 추가하고 num을
프린트할 거예요 num은
9가 아니죠
그 정도는 말할 수 있어요
그런 다음 일반 함수를 위해 0을 반환하죠
이제 그 기능을 실제로 구현하고 정의해야 해요
이걸 정의하려면 void Square라고 할게요
정수 포인터를 이용하기 때문에 int *x라고 입력할게요
이제 곱셈을 할 거예요
하지만 주소는 바꿀 수 없어요
그래서 여기서 할 수 있는 건 이걸 상수로 만들 수 있어요
하지만 데이터 형식 뒤에 상수를 넣어야
하죠 x의 값이나 그게 가리키는 것의 주소를
변경하고 싶지 않으니까요 그래서 int 상수라고 하죠
x 값을 바꾸고 싶지 않으면
상수라고 하죠 x의 값을 바꾸려면 그 자체로 정사각형을 만들어야 해요
그 자체로 정리하자면 먼저 바꿔야 할 것은
x의 궁극적 값이에요 인다이렉션 연산자를
써야 해요 별표로 지워야 해요
그런 다음 =를 합니다 x 곱하기 x는
하지 않아요 주소를 곱해야 하니까요 X는 포인터예요 x의 값만 취하는
게 아니라 x가 가리키는 것의 값도 취해야죠
다시 레퍼런스를 해제하고
그 자체로 곱하는 거죠 두 번 레퍼런스를 취소할 거예요
괄호 안에 넣는 게 좋을 것 같아요
그럼 무슨 일이 벌어지는지 쉽게 이해할 수 있죠
포인터를 참조하지 않고 그 값을 가져와서 그 값으로
곱하는 거죠 그런 다음 세미콜론을 추가해요 그게 다예요
여러분이 할 일은 그게 다예요 이 프로그램을 실행하면 81을 프린트할
거예요
넘버 값을 출력할 거예요 Num은 정사각형 안에서 변합니다
주소를 전달하고 있으니까요
포인터의 값을 변경할 수 없어요
형식 뒤에 상수가 있죠
그래서 여기서 빌드하면 선언을
안 바꾼 것 같죠
이제 다른 모든 게 정상인지
확인해야죠
포인터를 일관되게 하려면
별표 뒤에 넣어야 해요
int 시작 상수는 x의
값을 바꿀 수 없다는 뜻이에요
num의 주소죠
int 전후 혹은 input
후 별표 전후로 변경을 하면 포인터가
가리키는 값은 바꿀 수 없다는 뜻이에요
이제 이걸 실행하면 출력 81이 나올 거예요
이건 우리가 데이터를
수정했다는 걸 말해주죠
이
로컬 변수 num은 함수 안에서 수정되었고 값이 바뀌었어요
정상이 아니에요 지금까지 그 개념을 배운 적이 없어요 그건 참조 사항이에요
하지만 c에서는 주소의 사본을 전달하고 있죠
그래서 중복되는 거죠 상수도 필요 없어요 포인터
값을 바꾸더라도 포인터 값의 복사본이기
때문에 바꿀 필요가 없어요
기존의 숫자를 사용하고 싶지 않다면 포인터를 생성할 수 있습니다
메모리를 할당하기만 하면 되죠
여기서 해야 할 일은 int *num을 만드는 거죠
하지만 먼저 말코손바닥사슴을 캐스팅해야 해요 말코손바닥사슴은
보이드 포인터를 갖고 오거든요 하지만 메모리는
동적으로 할당할 수 있죠
여기에서는 하나의 정수를
만들고 있기 때문에 int의 크기만 정하면
메모리를 할당할 수 있어요
그런 다음 사각형 넘버원만 통과하면 돼요
이걸 만들 때도 똑같이
하지만 num에 대한 값이
없어요 뭘 컴퓨팅해야 할지
알 수 없죠 num의
값을 할당해야 해요 여기 4요 참조를 해제하죠
그걸
빌드하고 실행하면 16이 나오죠
여기서 유일하게 할 일은 값을 프린트하는 겁니다 그래서 num이라고 하죠
실행하면 16이 나올 거예요
같은 유형의 행동이에요
우린 16을 보죠
여기서 유일한 차이점은 포인트가 가리키는 것에
대한 메모리를 할당했다는 거죠 &&로 이미 존재하는 메모리 위치를
가리키는 게 아니라요
여기서 중요한 건 이 숫자가 함수 밖에서 변하고
있다는 거죠 이건 참조에
의한 거예요 여기서 참조 연산자 즉, 인다이렉션
연산자를 써서 포인트가 가리키는 값을 얻죠
함수가 포인터를 잡으면 포인터가 있으면
이름을 보낼 수 있어요
포인터를 취하지
않고 값이라면 참조를
해제해야 해요 이건 스캐프 같은 거예요
그래서 여기선 &를 써야 해요
그리고 프린트할 때 어떤 것도 참조
해제할 필요가 없어요 그건 포인터가 아니니까요
여기서도 같은 거죠
두 번째도 이해하세요 int 별은 그 점이 가리키는
값은 바뀔 수 없다고 말하고 있어요
int 스타트 후에 포인터의 주소는 바꿀 수 없다고 나와요 포인터의 값을 바꾸죠
도움이 됐으면 좋겠네요
다시 한 번 해보세요 구문을 좀 바꿔서요 제가 했던 것처럼요
배울 게 많을 거예요 고마워요