Skip to content

Latest commit

 

History

History
169 lines (125 loc) · 3.7 KB

Labs.md

File metadata and controls

169 lines (125 loc) · 3.7 KB

Pointer 변수 실습

  1. 다음 프로그램의 결과를 분석하라. myswap 함수가 하는 일과 출력 결과가 나오는 이유를 기술하라.
#include <iostream>
using namespace std;

void myswap(int a, int b){
	cout << "(before) a: " << a << ", b: " << b << endl;
	int tmp = a;
	a = b;
	b = tmp;
	cout << "(after) a: " << a << ", b: " << b << endl;
}

int main(int argc, char const *argv[])
{
	int x, y;
	cout << "정수 두 개를 입력하시오: ";
	cin >> x >> y;

	cout << "(main before) x: " << x << ", y: " << y << endl;

	myswap(x, y);

	cout << "(main after) x: " << x << ", y: " << y << endl;

	return 0;
}
  1. 다음 프로그램의 에러를 수정하고 왜 에러가 발생하였는지 분석하고 실행 결과를 1번과 비교하라. (1) 다음의 두 줄을 주석처리 하면 에러가 생기는지도 확인하라.
#include <iostream>
using namespace std;

void myswap(const int &a, const int &b){
	cout << "(before) a: " << a << ", b: " << b << endl;
	int tmp = a;
	//(1)
	a = b;
	b = tmp;
	cout << "(after) a: " << a << ", b: " << b << endl;
}

int main(int argc, char const *argv[])
{
	int x, y;
	cout << "정수 두 개를 입력하시오: ";
	cin >> x >> y;

	cout << "(main before) x: " << x << ", y: " << y << endl;

	myswap(x, y);

	cout << "(main after) x: " << x << ", y: " << y << endl;

	return 0;
}
  1. 다음 프로그램의 에러를 수정하고 왜 에러가 발생하였는지 분석하고 실행 결과를 1번과 2번과 비교하라.
#include <iostream>
using namespace std;

void myswap(int *a, int *b){
	cout << "(before) a: " << *a << ", b: " << *b << endl;
	int tmp = *a;
	*a = *b;
	*b = tmp;
	cout << "(after) a: " << *a << ", b: " << *b << endl;
}

int main(int argc, char const *argv[])
{
	int x, y;
	cout << "정수 두 개를 입력하시오: ";
	cin >> x >> y;

	cout << "(main before) x: " << x << ", y: " << y << endl;

	myswap(x, y);

	cout << "(main after) x: " << x << ", y: " << y << endl;

	return 0;
}
  1. 다음 프로그램에서 에러가 발생하면 에러가 왜 발생하였는지 확인하고 에러가 발생하지 않도록 수정하라. 힌트: (1)의 두 줄을 주석처리하고 (2)의 네 줄에 대한 주석을 해지하고 실행시킨 내용과 비교하라.)
#include <iostream>
using namespace std;


int main(int argc, char const *argv[])
{
	// (1)
	int *a;
	cout << *a << endl;


	// (2)
	// double *b;
	// b = new double(10.4);   
	// cout << *b << endl;
	// delete b;               

	return 0;
}
  1. 실수가 저장된 배열과 배열의 크기를 전달받아서 배열에 저장된 값 중 세 번째로 작은 값을 찾아 반환하는 함수를 정의하시오(함수를 호출할 때 배열의 크기는 3 이상 이어야 함). (함수 내의 연산은 포인터 변수 darr을 이용하여 작성하라.)
   함수의 원형: double thirdValueinArray(double *darr, int len);
  1. 다음 함수를 수행한 결과를 추론하라.
#include <iostream>
using namespace std;

int recursive(int a){
   if(a == 0) return 0;
   else return a + recursive(a-1);
}

int main(int argc, char const *argv[])
{
   int a, result;
   cin >> a;
   result = a + recursive(a-1);

   cout << result << endl;
   return 0;
}
  1. 다음 프로그램의 실행 결과를 추론하고 실행 결과와 비교를 하라.
#include <iostream>
using namespace std;

int main(int argc, char const *argv[])
{
	int a = 100, b = 200;
	int &ref = a;
	int *ptr = &b;

	*ptr = *ptr + 100;

	cout << ref << ", ";
	cout << *ptr << ", ";

	a += b++; 
	*ptr += ++ref;
	
	cout << ref << ", ";
	cout << *ptr << endl;
}
  1. SampleCodes의 Pointer 저장소의 프로그램을 실행하고 분석하라.