본문 바로가기
카테고리 없음

10/31 c

by woohyun22 2018. 10. 31.

#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 = &num;//태생이 일반변수라 주소를 받을수 없음
 *apple = num;//밑에 두개다 같음
 apple[0] = num;//이게 제일 쓰기 쉬움
 *(apple + 0) = num;
 apple[3] = 20;
 apple = &num;
 */
/*
 //보통 시작주소인 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는 반드시 같이 쓴다.
}

728x90

댓글