본문 바로가기
비트 단기/c

11/1

by woohyun22 2018. 11. 1.

#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);//메모리 보여줄때

 


 

}


 

728x90

'비트 단기 > 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

댓글