200811_TIL

hyeojung·2020년 8월 11일
0

TIL

목록 보기
8/62
post-thumbnail

윤성우의 열혈 C 프로그래밍

14-1 함수의 인자로 배열 전달하기

  • 함수 호출 시 전달되는 인자의 값은 매개변수에 "복사"된다. 즉, 함수 호출 이후에는 함수로 전달되는 인자와 매개변수는 별개가 된다.
  • 따라서 배열을 함수의 인자로 전달하기 위해서는 배열의 주소값을 전달하여 배열로 함수가 접근할 수 있게 해주면 된다. 이때 함수의 매개변수는, int형 배열의 주소 값을 전달받는다고 할 때 int *parameter 또는 int parameter[] 과 같이 선언하면 된다.
  • +) 함수 내에서는 인자로 전달된 배열의 길이를 계산할 수 없다(sizeof 연산자를 쓸 경우 포인터 변수의 크기가 반환됨). 따라서 배열의 크기나 길이 정보도 함께 인자로 전달해야 한다.

14-2 Call-by-value VS Call-by-reference

  • 값을 전달하는 형태의 함수 호출: Call-by-value
  • 주소 값을 전달하는 형태의 함수 호출: Call-by-reference
  • scanf 함수 호출 시 &연산자를 붙이는 이유: 프로그램 사용자로부터 값을 입력받아 변수에 값을 채워 넣기 위해 scanf 함수가 그 변수의 주소를 알고 있어야 하기 때문(Call-by-reference)
  • 문자열을 입력받을 때 &연산자를 붙이지 않는 이유: 문자열의 이름 그 자체가 배열의 주소 값을 전달하는 역할을 하기 때문

문제 14-1 Call-by-value VS Call-by-reference

문제 1
// Call-by-value
#include <stdio.h>

int SquareByValue(int n);

int main() {
	int num = 3;
	printf("%d\n", SquareByValue(num));
}
int SquareByValue(int n) {
	return n * n;
}
// Call-by-reference
#include <stdio.h>

void SquareByReference(int* n);

int main() {
	int num = 3;
	SquareByReference(&num);
	printf("%d\n", num);
}
void SquareByReference(int* n) {
	int squarenum = *n * *n;
	*n = squarenum;
}
문제 2
#include <stdio.h>

void swap3(int* n1, int* n2, int* n3);

int main() {
	int num1 = 1, num2 = 2, num3 = 3;
	swap3(&num1, &num2, &num3);
	printf("%d %d %d\n", num1, num2, num3);
}
void swap3(int* n1, int* n2, int* n3) {
	int temp1 = *n1;
	int temp2 = *n2;
	*n1 = *n3;
	*n2 = temp1;
	*n3 = temp2;
}

14-3 포인터 대상의 const 선언

  • const int * ptr : 포인터 변수가 참조하는 대상의 변경을 비허용 (포인터 변수가 가리키는 변수가 상수화되는 것은 아니므로 포인터를 이용한 값 변경만 불가능하고 변수를 통한 값 변경은 가능)
  • int * const ptr : 포인터 변수 ptr은 상수(주소 값의 변경이 불가능하여 한번 가리키기 시작한 변수를 끝까지 가리켜야 함, 포인터로 접근해 ptr이 가리키는 대상에 저장된 값 변경은 가능)
  • const 선언이 갖는 의미: 코드의 안정성이 훨씬 높아지며, 오류를 범할 가능성을 줄인다!

문제 14-2 const 선언에 대한 추가적인 이해

문제 1
  • 인자로 전달되는 정보를 참조하여 int형 배열 요소 전체를 출력하는 함수에서, 매개변수를 대상으로 const 선언(const int * arr)을 해준 이유: 혹시라도 사용자 함수에서 인자로 받은 배열에 포인터로 접근하여 배열의 값을 변경해서는 안 되기 때문이다.
문제 2
  • 코드를 기록하지는 않겠지만, 책에 있는 예제를 보면 사용자 정의 함수에서 매개 변수를 const int * ptr로 선언하였으면서(참조를 통한 값 변경 불가능) 사용자 함수 내에서 이중 참조(?)를 통해 값을 변경하려고 하고 있다. 이는 const 선언을 무의미하게 만들기 때문에 잘못되었다.


인프런 Inflearn 🌈 빠르게 git - 핵심만 골라 배우는 Git/Github

  • git과 github가 개발자로서 상당히 필요한 도구인 것 같아 보이는데, 나는 뭐가 뭔지 하나도 몰라서 기초 강의인 빠르게 git - 핵심만 골라 배우는 Git/Github 를 인프런에서 결제했다.
  • 깃헙 회원가입만 해놓고 아무것도 할 줄 모르는 나란 사람,,, 좀 배울 필요가 있다,,
  • 깃(Git)을 다운받았다! 오늘은 강의 하나만 들었고 내일 마저 또 공부해야징


오늘 공부하면서 느낀 점

  • 개발자로 정말 갈 길이 멀다는 게 자꾸 느껴진다,, 그치만 재밌게 공부할 수 있는 지금이 정말 좋다!
  • 요즘 복학을 앞두고 바쁘기도 하고 잠이 많아져서 공부량이 줄어든 것 같다ㅠ 포인터 관련 내용이라 꼼꼼하게 보고 있는 점을 차치하고서라도 책 넘어가는 속도가 느리다... 방심하지 말고 열심히 공부해야지 :)
  • 인프런 강의는 사실 쿠폰 유효기간이 오늘까지라서 지른 건데 잘 한 것 같아서 기분 좋다ㅎㅎ 길지 않은 강의니까 빠르게 들어야겠다.
profile
응애 나 애기 개발자

0개의 댓글