#include "pch.h"
#include <iostream>
int main()
{
/*
short a = 10;//short a; a=10;
short *b = &a;//short *b; b=&a; 선언과 공유 두줄의 코드
printf("%d %d", a, *b);
*/
/*
short a = 10;
long *b;
//b = &a; - 서로type이 다르다
*/
/*
//ctrl k + c ,ctrl k+u
short *a=NULL;//주소를 초기화 0으로
printf("%p", a);//%p는 16진수 나타냄
if (a==NULL) {
printf("호랑이");
}*/
/*
short a = 10;
short *b = &a;
printf("%d\n", *b);
*b = 0;
b = NULL;//주소를 없애버린다.
*b = 0;
printf("%d", b);
*/
/*
long ar[5] = {0};//배열을 short = 주소가 2씩증가 long = 4,char =1
printf("%p %p %p\n", &ar[0], &ar[1], &ar[2]);
for (short i = 0; i < 5; i++)
{
printf("%d\n", &ar[i]);
}
*/
/*
short ar[5] = { 0 };
ar[0] = 100,ar[1]=200;
short *ptr;//메모리 공유받기전
ptr = &ar[0];//값 받아주기
printf("%d\n", *ptr);//100
ptr = &ar[1];
printf("%d\n", *ptr);//200
ptr = &ar[4];
*ptr = 300;
printf("%d", ar[4]);//300
*/
/*
short ar[5] = { 10,20,30,40,50 };
short *ptr;
ptr = &ar[0];//10
printf("%d\n", *ptr);
printf("%d %d %d\n", *ptr,*(ptr),*(ptr+0));
printf("%d\n", *(ptr + 0)); //10 ar[0]이라는 뜻
printf("%d\n", *(ptr + 1)); //20 ar[1]이라는 뜻
printf("%d\n", *(ptr + 4)); //50 ar[4]이라는 뜻
for (short i = 0; i < 5; i++)
{
printf("%d %d\n", ar[i], *(ptr + i));
}
ar[3] = *(ar + 3);//이 문법 중요
printf("\n");
for (short i = 0; i < 5; i++)
{
printf("%d %d\n",*(ar+i),ptr[i]);
}
//a[b] = *(a + b); 포인터는 배열이 쓰기 편하니까 쓰는데 굳이 배열을 포인터로 쓰진않음.
*/
/*
short ar[5] = { 0 };
short *ptr;
ptr = &ar[0];
*(ptr + 2) = ptr[2];
printf("%d %d\n", ar[2], *(ar + 2));
*/
/*
//ptr이 ar이 되어가는 과정
short ar[5] = {0};
short *ptr;
ptr = &ar[0];
ptr = ar;
*/
/*
short ar[5] = { 0 };
short b = 20;
short c = 30;
short *p;
p = &c;
printf("%d\n", *p);//30
p = &ar[0];
printf("%d\n", *p);//0
p = &b;
printf("%d\n", *p);//20
p = ar;
printf("%d\n", *p);//0
*/
/*
short ar[5] = { 0 };
short *apple;
apple = &ar[5];//공유
apple = ar;
short num = 10;
//ar = #//태생이 일반변수라 주소를 받을수 없음
*apple = num;//밑에 두개다 같음
apple[0] = num;//이게 제일 쓰기 쉬움
*(apple + 0) = num;
apple[3] = 20;
apple = #
*/
/*
//보통 시작주소인 0을 받는다.
short ar[] = { 0,1,2,3,4 };
short *orange;
orange = &ar[2];//공유 2층
printf("%d %d %d\n", *orange, *(orange + 0), orange[0]);//222
printf("%d %d \n",*(orange -1),*(orange+1));//13
printf("%d %d \n",orange[-1],orange[1]);//13
*/
/*
long ar[] = { 0,1,2,3,4 };
long *ptr = &ar[0];//ar도가능
printf("%d %d\n", *ptr,ptr);
ptr++;//값, 층수 1 증가, 주소 4증가 long
printf("%d %d", *ptr, ptr);
*/
/*
long ar[] = { 10,20,30,40,50 };
long *p = ar;
printf("%d %d \n", *p, p);
*p++;//(*p)++가 아니고, *(p++)이다
printf("%d %d\n",*p,p);//층수 올라가고, 주소 올라가
long *t = ar;
printf("%d %d\n", *t, t);
(*t)++;//배열의 값에서 1증가
printf("%d %d", *t,t);//0층 자체의 값이 올라가
*/
/*
//ex1
//할당
short *ptr;
ptr = new short;//메모리 할당받음
*ptr = 100;
printf("%d\n", *ptr);
short *apple;
apple = ptr;//공유받음
printf("%d\n", *apple);
apple = new short;
*apple = 200;
printf("%d %d\n", *ptr,*apple);
*/
//ex2
long *p;
p = new long;//반드시 타입 자기꺼
*p = 100;
printf("%d %d\n", *p,p);
//할당을 받으면 반드시 반납을 해주어야한다.
delete p;//반납 반납후에는 메모리가 죽음
*p = 30;
printf("%d %d", *p, p);
//new 와 delete는 반드시 같이 쓴다.
}
댓글