#include "pch.h"
#include <iostream>
#include <time.h>
int main()
{
/*
short *a = NULL;
a = new short;//주소 받기
*a = 10;
printf("%d %p", *a,a);
delete a;// new가 나오면 delete까지
*/
/*
short *a,b=10;
a = &b;//a는 b에게 공유받음
a = new short;//b와는 공유가 끊김
delete a;
a = &b;//주소 공유는 문제는 안되지만, 메모리 누수가 일어남
//반드시 먼저했던것에 delet를 해야된다.
a = new short;
*a = b;
delete a;
*/
/*
short *a, b = 20, c[5];
a = c;//a = &c[0]과 같은 코드이다 공유가됨
for (int i = 0; i < 5; i++) {
*(a+i) = i * 10;
}
for (int i = 0; i < 5; i++) {
printf("%d %d\n", a[i], c[i]);
}
//delete a; 일반변수 메모리는 삭제할수 없다. new가 없으면 쓸수없다.
a = new short;
*a = c[3];
delete a;//new 나오면 delete꼭나와야됨
*/
//할당을 한개 이상 받을때
/*
short *a;
a = new short;
delete a;
a = new short[5];
for (int i = 0; i < 5; i++) {
*(a + i) = i;
printf("%d\n", a[i]);
}
//delete a;//메모리 5개중에 하나만 삭제됨 4개는 누수가 일어남
delete []a;//메모리 5개 다 삭제 []a 갑옷벗기
*/
/*
for (int i = 0; i < 100; i++)
{
short *a = new short;
delete a;
short *b = new short[10000];
delete b;//지혼자 메모리줬다 지웠다 함
}
*/
//일반변수가 사라질때는 스코프가 닫혔을때다..
/*
{
short a = 10;
short *p = new short;//할당받은 친구는 delete만나지 않는 이상 유지된다.
delete p;//지역변수 선언때문에 스코프 밖에서는 사용불가
}//닫히는 곳에서 a의 메모리가 사라짐
short *p;//전역 변수 스코프 밖에서 선언
{
p = new short[10];
}
delete []p;//이 경우는 스코프 밖에서도 delete가능 //이떄 그냥 p를 쓰면 나머지는 전부 누수가 일어난다.
*/
/*
short ar[10];
short *br = new short[10];
delete []br;
*/
/*
long input;
scanf_s("%d", &input);
printf("%d\n", input);
short *ar=new short[input];//14자리에 input가능
for (short i = 0; i < input; i++)
{
ar[i] = rand() % input;//배열에는 변수를 직접줘야 사용가능 입력받은값은 x
}
for (short i = 0; i < input; i++)
{
printf("%2d ", ar[i]);
}
printf("\n\n");
for (short i = 0; i < input /2; i++)
{
printf("%2d ", ar[i]+ar[input -1-i]);
}
delete[]ar;
*/
}
#include "pch.h"
#include <iostream>
#include <time.h>
int main()
{
//일반 메모리 - 고정 메모리=정적 static
//포인터 - 동적 메모리 = 가변 dynamic
//기술면접 28~32자 정리
/*
short a = 10;
long b = 20;
void *p;//type이 없다.
p = &a;
p = &b;
//받는 타입에 구분없이 사용하는게 void pointer
short c;
c = *(short *)p;//타입 캐스팅
*/
/*
short a = 10, b;
short *p = &a;
b = *p;
printf("%d");
b = *(short *)p;//p를 short타입의 주소로 보세요~ (short*)는 평소에 생략
b = (short)*p;//생략됨
b = (short )*(short*)p;//원코드
b = *p;//앞의 값을 default값으로 주고 바로 적은 예
short *t;
t = (short *)p;//위의 b 축약
*/
/*
short *a;
a = (short *)malloc(2);//안에 숫자는 byte
long *b;
b = (long *)malloc(4);
char *c;
c = (char *)malloc(1);
*a = 10, *b = 20 ,*c=30;
//malloc 는 free
free(a);
free(b);
free(c);//한개받을때
//하나이상
long *d;
d = (long *)malloc(4 * 12);//12개줘라(4자리에 sizeof(long))을 넣는다.
for (short i = 0; i < 12; i++)
{
*(d + i) = i;
printf("%d ", d[i]);
}
free(d);//한개든 한개이상이든 free쓰면 해제된다
//c에서는 malloc 있고 c++에서는 대용으로 new를 쓴다.
*/
printf("%d",sizeof(long));
sizeof(char);//메모리 보여줄때
}
'비트 단기 > c' 카테고리의 다른 글
10/30 복습 포인터부터 (0) | 2018.11.05 |
---|---|
11/2 (0) | 2018.11.02 |
10/30 pointer (0) | 2018.10.31 |
while, scanf,switch (0) | 2018.10.26 |
연산자 ++ -- for문 1~ (0) | 2018.10.25 |
댓글