728x90
반응형
#include <iostream>
using namespace std;
int main()
{
int donuts = 6; //4바이트 자료형
double cups = 4.5; //8바이트 자료형
cout << "cups의 값= " << cups;
cout << ", cups의 주소= " << &cups << endl;
cout << "donuts의 값= " << donuts;
cout << ", donuts의 주소= " << &donuts << endl;
return 0;
}
-> & [주소연산자] : 변수 앞에 붙이면 그 변수의 주소
-> * [역참조 연산자] : 포인터 앞에 붙이면 그 주소에 저장되어 있는 값
->8바이트 차이 [double]
-> 4바이트 차이 [int]
-> 컴파일러에 따라 다르다
#include <iostream>
using namespace std;
int main_pointer()
{
int updates = 6; //int형 변수를 선언
int* p_updates; //in형을 지시하는 포인터를 선언
p_updates = &updates; //int형의 주소를 포인터에 대입
//값을 두 가지 방법으로 표현
cout << "값 : updates = " << updates;
cout << ", p_updates= " << p_updates << endl;
//주소를 두 가지 방법으로 표현
cout << "주소: &update : " << &updates;
cout << ", p_updates = " << p_updates << endl;
//포인터를 사용하여 값을 변경
*p_updates = *p_updates + 1;
cout << "변경된 updates= " << updates << endl;
return 0;
}
int jumbo = 23; int* pe=&jumbo; |
||
jumbo | &jumbo | |
*pe | pe | |
값 23 | 주소 0x2ac8 | |
모두 같은 값을 나타낸다 | 모두 같은 주소를 나타낸다. |
포인터 선언과 초기화
#include <iostream>
using namespace std;
int main()
{
int higgens = 5;
int* pt = &higgens;
cout << "higgens의 값= " << higgens << ", higgens의 주소 = " << &higgens << endl;
cout << "*pt의 값= " << *pt << ", pt의 값 = " << pt << endl;
return 0;
}
-> higgens의 주소와 pt의 주소가 같다.
-> 포인터를 사용하기 전에 반드시 포인터를 &로 초기화해야 한다.
#include <iostream>
using namespace std;
int main()
{
int nights = 1001;
int* pt = new int; //int형을 저장할 메모리를 대입
*pt = 1001; //대입된 메모리에 값을 저장
cout << "nights의 값 = ";
cout << nights << ": 메모리 위치" << &nights << endl;
cout << "int 형";
cout << "값 = " << *pt << ": 메모리 위치 = " << pt << endl;
double* pd = new double; //double형을 저장할 메모리를 대입
*pd = 10000001.0; //그 메모리에 double형 값을 저장
cout << "double 형 ";
cout << "값 = " << *pd << " : 메모리 위치= " << pd << endl;
cout << "포인터 pd의 메모리 위치 : " << &pd << endl;
cout << "pt의 크기 = " << sizeof(pt);
cout << ": *pt의 크기 = " << sizeof(*pt) << endl;
cout << "pd의 크기 = " << sizeof(pd);
cout << ": *pd의 크기 = " << sizeof(*pd) << endl;
return 0;
}
-> 포인터형의 크기 : 4Byte
-> int형 크기 : 4Byte, double형 크기 : 8Byte
#include <iostream>
using namespace std;
int main()
{
double* p3 = new double[3]; //double형 데이터 3개 저장가능한 공간 대입
p3[0] = 0.2;
p3[1] = 0.5;
p3[2] = 0.8;
cout << "p3[0]은 " << p3[0] << "입니다." << endl;
cout << "p3[1]은 " << p3[1] << "입니다." << endl;
p3 = p3 + 1; // 포인터를 증가시킨다.
cout << "이제는 p3[0]은 " << p3[0] << "이고" << endl;
cout << "p3[1]이 " << p3[1] << "입니다. " << endl;
p3 = p3 - 1; //다시 시작 위치를 지시
cout << "p3[0]은 " << p3[0] << "이고" << endl;
cout << "p3[1]이 " << p3[1] << "입니다. " << endl;
delete[] p3; //배열 메모리를 해제
return 0;
}
-> p3=p3+1; : p3가 포인터면 값 변경 가능 / p3가 배열이면 값 변경 불가능 [상수이기 때문에]
728x90
반응형
'Programming > C++ 2' 카테고리의 다른 글
[C++ 실습] 4장-09. 변수형의 조합 (0) | 2021.04.06 |
---|---|
[C++ 실습] 4장-08. 포인터, 배열, 포인터 연산 (0) | 2021.04.06 |
[C++ 실습] 4장-04. 구조체 (0) | 2021.04.04 |
[C++ 실습] 4장-03. String 클래스 (0) | 2021.04.04 |
[C++ 실습] 4장-02. 문자열 (0) | 2021.04.04 |