언어는 과-학인가요?/C++

동적변수와 정적변수

이원자 탄소 2020. 11. 21. 13:53
728x90

정적 할당

- stack 과 data영역에 할당 될 메모리의 크기는 컴파일 타임에 결정됨

 

동적 할당 

- heap 영역은 프로그램이 실행되는 중간에 메모리를 할당하고 해제할 수 있는 공간이 결정된다

 

동적할당 하는법

#include <iostream>

using namespace std;


int main() {
	int num = 200;

	//int* pnum; //포인터 변수 선언: 주소만 가질수 있다
	int* pnum = new int(100); //자료형으로 변수 만들기 new;동적할당

	cout << num << endl;
	cout << pnum << endl;//주소 프린트
	cout << *pnum << endl;//변수 안의 저장된 주소를 찾아가서 값을 처리

	*pnum = 300;
	cout << pnum << endl;
	cout << *pnum << endl;

	delete pnum;
}

같은 주소에 새로운 값만 할당

 

 

 

배열 동적할당: 단위가 큰 배열은 동적할당이 빠름

#include <iostream>

using namespace std;


int main() {
	cout << "integer number: ";
	int n = 0;
	cin >> n;
	if (n < -0) return 0;
	int* p = new int[n];
	if (!p)
	{
		cout << "cant get memory" << endl;
		return 0;
	}
	for (int i = 0; i < n; i++) {
		cout << i + 1 << "th integer";
		cin >> p[i];
	}
	int sum = 0;
	for (int i = 0; i < n; i++)
	{
		sum += p[i];
	}
	cout << "sum of all number: " << sum << endl;
	delete[] p;
}

 

객체 만드는 동적할당

#include <iostream>

using namespace std;


class student {

private:
	string name;
	int grade;
	int room;

public:
	student()
	{
		cout << "-------------->student 생성자<---------------" << endl;
	}

	void setName(string n) {
		name = n;
	}
	void setGrade(int g) {
		grade = g;
	}
	void setRoom(int r) {
		room = r;
	}

	string getName() {
		return name;
	}
	int getGrade() {
		return grade;
	}
	int getRoom() {
		return room;
	}
};

int main() {
	student stu1;
	stu1.setName("Emily");
	stu1.setGrade(12);
	stu1.setRoom(3);

	cout << &stu1 << endl;
	cout << stu1.getName() << endl;
	cout << stu1.getGrade() << endl;
	cout << stu1.getRoom() << endl;

	cout << "+++++++++++++++++++++++++++++++++++++++++++++" << endl;
}

 

동적할당 정적할당 차이

#include <iostream>

using namespace std;

#include <iostream>

using namespace std;


class student {

private:
	string name;
	int grade;
	int room;

public:
	student()
	{
		cout << "-------------->student 생성자<---------------" << endl;
	}

	void setName(string n) {
		name = n;
	}
	void setGrade(int g) {
		grade = g;
	}
	void setRoom(int r) {
		room = r;
	}

	string getName() {
		return name;
	}
	int getGrade() {
		return grade;
	}
	int getRoom() {
		return room;
	}
};

int main() {

	/* 정적 할당
	student stu1;
	stu1.setName("Emily");
	stu1.setGrade(12);
	stu1.setRoom(3);

	cout << &stu1 << endl;
	cout << stu1.getName() << endl;
	cout << stu1.getGrade() << endl;
	cout << stu1.getRoom() << endl;

	cout << "-------------->student 소멸자<---------------" << endl;
	*/

	//동적 할당
	student* ps = nullptr;
	ps = new student;

	ps->setName("Layla");
	ps->setGrade(9);
	ps->setRoom(1);

	cout << ps->getName() << endl;
	cout << ps->getGrade() << endl;
	cout << ps->getRoom() << endl;

	delete ps;

	cout << "-------------->student 소멸자<---------------" << endl;

	student* stu = new student;

	stu->setName("Carbon");
	stu->setGrade(11);
	stu->setRoom(6);

	cout << stu->getName() << endl;
	cout << stu->getGrade() << endl;
	cout << stu->getRoom() << endl;

	delete stu;
	cout << "-------------->student 소멸자<---------------" << endl;
}
728x90