1 / 10

인수 전달

인수 전달. call by value 함수가 호출될 때 가인수의 메모리가 할당되며 실인수의 값만 가인수에 전달되어 저장됨 함수 안에서 가인수의 값을 바꾸어도 함수 종료 후 호출한 곳으로 돌아 갔을 때 실인수의 값은 호출전과 같음  함수간의 독립성 보장 call by address 함수의 가인수로 포인터 변수를 이용하는 방식 함수가 호출될 때 가인수의 메모리 ( 포인터로 4 바이트 ) 가 할당되며 실인수의 주소가 전달되어 저장됨 함수 안에서 가인수 ( 포인터 ) 를 이용하여 실인수의 내용을 변경할 수 있다.

violet
Download Presentation

인수 전달

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 인수 전달 • call by value • 함수가 호출될 때 가인수의 메모리가 할당되며 실인수의 값만 가인수에 전달되어 저장됨 • 함수 안에서 가인수의 값을 바꾸어도 함수 종료 후 호출한 곳으로 돌아 갔을 때 실인수의 값은 호출전과 같음  함수간의 독립성 보장 • call by address • 함수의 가인수로 포인터 변수를 이용하는 방식 • 함수가 호출될 때 가인수의 메모리(포인터로 4바이트)가 할당되며 실인수의 주소가 전달되어 저장됨 • 함수 안에서 가인수(포인터)를 이용하여 실인수의 내용을 변경할 수 있다.

  2. call by address 함수명(실인자의 주소) • 함수 호출시 int a = 10; func(&a); a를 출력하면? • 함수 정의시 void func(int * ptr) { *ptr = 20; } a 10 12FF78번지 리턴형 함수명(자료형 * 가인수) { 본체 } ptr 12FF78

  3. 10 5 a b x y 예제 11.10 참조에 의한 호출(call by reference)의 예 • 두 변수 a와 b의 값을 교환하는 함수 작성 void swap(int __ x, int __ y ); //원형 선언 void main(){ int a=10, b=5; printf(“교환전: %d, %d \n”, a, b); swap(___a, ___b); printf(“교환후: %d, %d \n”, a, b); } void swap(int ___ x, int ___ y) { int temp; temp = ___x; ___x = ___y; ___y = temp; } * * & & * * * * * * temp

  4. 난수(random number) / 노트 • 함수 int rand(void) • #include <stdlib.h>가 필요 • rand() 0~32767(RAND_MAX) 사이의 난수가 리턴됨 1 번째 난수 : 3000 2 번째 난수 : 1 3 번째 난수 : 15000 4 번째 난수 : 32767 : 10 번째 난수 : 78 • for (i=1; i<=10 ; i++) • printf(“ %2d 번째 난수 : %d \n”, i, rand());

  5. 난수(random number) / 노트 • RAND_MAX rand()가 발생시키는 최대 난수값, 32767 • 0, 1, 2 중 하나의 난수 rand() % 3 • 1, 2, 3 중 하나의 난수 rand() % 3 + 1 • 0 ~ end 사이의 실수형 난수 rand() * end / RAND_MAX;

  6. 난수(random number) / 노트 • 컴퓨터와 가위, 바위, 보 게임을 하고 싶다면? • 게임에서 사람이 낼 것 • 가위/바위/보 중 하나이며 입력을 통해 결정할 수 있다. • 컴퓨터가 낼 것 • 프로그램에서 가위/바위/보 중 하나를 결정해줘야 한다. • 가장 단순하게는 난수를 이용하여 셋 중 아무거나 한 개로 computer = rand() % 3 + 1;  1~3 중 하나가 됨 • 좀 더 재밌게 실제 게임과 비슷하게 하려면 이전 게임에서 사람이 낸 것과 게임 결과를 토대로 이길 수 있는 것으로 결정하도록 인공지능? 기능을 추가한다. 컴퓨터와 가위바위보 게임을!!! 무엇을 내겠습니까> 1.가위 2.바위 3.보 ? _ scanf(“%d”, &man)

  7. 난수(random number) / 노트 • 가위, 바위, 보에 해당하는 1, 2, 3을 매크로 상수로 정의하면 프로그램하기가 훨씬 쉬워진다. • #define GAWI 1 • #define BAWI 2 • #define BO 3 • : • scanf(“%d”, &man); • computer = rand() % 3 + 1; • if (man==BAWI && computer==GAWI) • printf(“축하! 당신이 이겼습니다!”); • :

  8. 난수(random number) / 노트 • 함수 void srand(unsigned seed); • 난수 발생기의 seed 값을 설정해주는 함수 • seed값이 같다면 프로그램을 새로 실행해도 같은 순서의 난수들이 발생  앞의 4번 슬라이드의 프로그램을 실행하면 실행할 때마다 같은 순서의 난수가 발생하는 것을 확인할 수 있다.  가위바위보 게임과 같은 경우 여러 번 게임을 하다보면 컴퓨터가 다음 번에 낼 것이 무엇인지 알 수 있다. • 프로그램이 실행될 때마다 다른 일련의 난수들을 발생시키기 난수 발생기에서 난수를 얻기 전에 난수 발생기의 씨드를 지정해주되 프로그램이 새로 실행될 때마다 다른 씨드값이 지정되도록 해야 한다. how? 현재 시간을 seed로 지정함 •  프로그램이 실행될 때마다 시간은 바뀌므로 씨드가 달라진다. • srand(time(NULL));

  9. 난수(random number) / 노트 프로그램을 실행할 때 마다 이 함수가 실행되는 시간이 바뀌므로 씨드가 달라지고 이후로 rand()에서 얻는 난수들이 이전 실행때와 다르다. • srand(time(NULL)); // 현재 시간을 seed로 설정 • for (i=1; i<=10 ; i++) • printf(“ %d 번째 난수 : \n”, i, rand()); 첫번째 실행결과 3000 1 15000 : 78 두번째 실행결과 250 300 4 : 32000 세번째 실행결과 45 12000 20000 : 799

  10. 커서를 화면의 원하는 위치로 이동하기/ 노트 • gotoxy( x, y); =>커서를 (x, y) 좌표 지점으로 이동 #include <windows.h> void gotoxy(int x, int y) { COORD Cur; Cur.X=x; Cur.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Cur); } void main( ) { gotoxy(20, 15); printf( “***** 20, 15“); gotoxy(20, 10) ; printf(“***** 20, 10”); } x (0, 0) 모니터 y  (x, y) (79,23)

More Related