언어는 과-학인가요?/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